rubygems-update 3.0.3 → 3.4.7

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 (795) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5556 -0
  3. data/CODE_OF_CONDUCT.md +62 -24
  4. data/CONTRIBUTING.md +111 -21
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +209 -101
  7. data/POLICIES.md +65 -22
  8. data/README.md +23 -15
  9. data/UPGRADING.md +5 -81
  10. data/bin/gem +2 -16
  11. data/bin/update_rubygems +5 -5
  12. data/bundler/CHANGELOG.md +2619 -1256
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +11 -12
  15. data/bundler/UPGRADING.md +222 -0
  16. data/bundler/bundler.gemspec +13 -33
  17. data/bundler/exe/bundle +26 -11
  18. data/bundler/exe/bundler +1 -1
  19. data/bundler/lib/bundler/.document +1 -0
  20. data/bundler/lib/bundler/build_metadata.rb +5 -13
  21. data/bundler/lib/bundler/capistrano.rb +4 -4
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +11 -3
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/check.rb +5 -3
  26. data/bundler/lib/bundler/cli/clean.rb +1 -1
  27. data/bundler/lib/bundler/cli/common.rb +41 -13
  28. data/bundler/lib/bundler/cli/config.rb +170 -86
  29. data/bundler/lib/bundler/cli/console.rb +3 -3
  30. data/bundler/lib/bundler/cli/doctor.rb +27 -10
  31. data/bundler/lib/bundler/cli/exec.rb +8 -25
  32. data/bundler/lib/bundler/cli/fund.rb +36 -0
  33. data/bundler/lib/bundler/cli/gem.rb +261 -48
  34. data/bundler/lib/bundler/cli/info.rb +52 -8
  35. data/bundler/lib/bundler/cli/init.rb +7 -3
  36. data/bundler/lib/bundler/cli/inject.rb +1 -1
  37. data/bundler/lib/bundler/cli/install.rb +38 -66
  38. data/bundler/lib/bundler/cli/issue.rb +8 -7
  39. data/bundler/lib/bundler/cli/list.rb +19 -11
  40. data/bundler/lib/bundler/cli/lock.rb +11 -4
  41. data/bundler/lib/bundler/cli/open.rb +14 -9
  42. data/bundler/lib/bundler/cli/outdated.rb +152 -121
  43. data/bundler/lib/bundler/cli/platform.rb +2 -2
  44. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  45. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  46. data/bundler/lib/bundler/cli/remove.rb +1 -2
  47. data/bundler/lib/bundler/cli/show.rb +3 -3
  48. data/bundler/lib/bundler/cli/update.rb +49 -18
  49. data/bundler/lib/bundler/cli/viz.rb +1 -1
  50. data/bundler/lib/bundler/cli.rb +269 -165
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +7 -24
  52. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  53. data/bundler/lib/bundler/compact_index_client/updater.rb +58 -57
  54. data/bundler/lib/bundler/compact_index_client.rb +28 -18
  55. data/bundler/lib/bundler/constants.rb +1 -1
  56. data/bundler/lib/bundler/current_ruby.rb +26 -11
  57. data/bundler/lib/bundler/definition.rb +359 -441
  58. data/bundler/lib/bundler/dependency.rb +29 -71
  59. data/bundler/lib/bundler/deployment.rb +1 -1
  60. data/bundler/lib/bundler/digest.rb +71 -0
  61. data/bundler/lib/bundler/dsl.rb +84 -116
  62. data/bundler/lib/bundler/endpoint_specification.rb +20 -14
  63. data/bundler/lib/bundler/env.rb +10 -15
  64. data/bundler/lib/bundler/environment_preserver.rb +30 -3
  65. data/bundler/lib/bundler/errors.rb +31 -14
  66. data/bundler/lib/bundler/feature_flag.rb +13 -33
  67. data/bundler/lib/bundler/fetcher/base.rb +7 -9
  68. data/bundler/lib/bundler/fetcher/compact_index.rb +46 -39
  69. data/bundler/lib/bundler/fetcher/dependency.rb +2 -2
  70. data/bundler/lib/bundler/fetcher/downloader.rb +15 -12
  71. data/bundler/lib/bundler/fetcher/index.rb +4 -30
  72. data/bundler/lib/bundler/fetcher.rb +39 -41
  73. data/bundler/lib/bundler/force_platform.rb +18 -0
  74. data/bundler/lib/bundler/friendly_errors.rb +49 -54
  75. data/bundler/lib/bundler/gem_helper.rb +79 -43
  76. data/bundler/lib/bundler/gem_helpers.rb +44 -28
  77. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  78. data/bundler/lib/bundler/gem_version_promoter.rb +54 -99
  79. data/bundler/lib/bundler/graph.rb +5 -5
  80. data/bundler/lib/bundler/index.rb +14 -52
  81. data/bundler/lib/bundler/injector.rb +50 -16
  82. data/bundler/lib/bundler/inline.rb +28 -29
  83. data/bundler/lib/bundler/installer/gem_installer.rb +22 -23
  84. data/bundler/lib/bundler/installer/parallel_installer.rb +51 -51
  85. data/bundler/lib/bundler/installer/standalone.rb +62 -12
  86. data/bundler/lib/bundler/installer.rb +46 -97
  87. data/bundler/lib/bundler/lazy_specification.rb +88 -48
  88. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  89. data/bundler/lib/bundler/lockfile_parser.rb +30 -62
  90. data/bundler/{man → lib/bundler/man}/bundle-add.1 +29 -5
  91. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +22 -4
  92. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  93. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  94. data/bundler/lib/bundler/man/bundle-cache.1 +61 -0
  95. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +22 -15
  96. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  97. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +2 -2
  98. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  99. data/bundler/{man → lib/bundler/man}/bundle-config.1 +78 -60
  100. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +96 -85
  101. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  102. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  104. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +6 -6
  105. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +6 -6
  106. data/bundler/lib/bundler/man/bundle-gem.1 +105 -0
  107. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  108. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  109. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  110. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  111. data/bundler/{man → lib/bundler/man}/bundle-init.1 +6 -2
  112. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +3 -1
  113. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  114. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  115. data/bundler/{man → lib/bundler/man}/bundle-install.1 +42 -37
  116. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +42 -38
  117. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  118. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  119. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  120. data/bundler/{man → lib/bundler/man}/bundle-open.1 +22 -2
  121. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
  122. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
  123. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
  124. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  125. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  126. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  127. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  128. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  129. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  130. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  131. data/bundler/{man → lib/bundler/man}/bundle-update.1 +8 -8
  132. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +8 -7
  133. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  134. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  135. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  136. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  137. data/bundler/{man → lib/bundler/man}/bundle.1 +17 -12
  138. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  139. data/bundler/lib/bundler/man/gemfile.5 +723 -0
  140. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +112 -95
  141. data/bundler/lib/bundler/man/index.txt +29 -0
  142. data/bundler/lib/bundler/match_metadata.rb +13 -0
  143. data/bundler/lib/bundler/match_platform.rb +1 -2
  144. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  145. data/bundler/lib/bundler/mirror.rb +10 -12
  146. data/bundler/lib/bundler/plugin/api/source.rb +29 -15
  147. data/bundler/lib/bundler/plugin/api.rb +1 -1
  148. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  149. data/bundler/lib/bundler/plugin/index.rb +31 -8
  150. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  151. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -9
  152. data/bundler/lib/bundler/plugin/installer.rb +35 -22
  153. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  154. data/bundler/lib/bundler/plugin.rb +102 -42
  155. data/bundler/lib/bundler/process_lock.rb +1 -1
  156. data/bundler/lib/bundler/remote_specification.rb +15 -8
  157. data/bundler/lib/bundler/resolver/base.rb +77 -0
  158. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  159. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  160. data/bundler/lib/bundler/resolver/package.rb +72 -0
  161. data/bundler/lib/bundler/resolver/root.rb +25 -0
  162. data/bundler/lib/bundler/resolver/spec_group.rb +49 -73
  163. data/bundler/lib/bundler/resolver.rb +343 -300
  164. data/bundler/lib/bundler/retry.rb +4 -4
  165. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  166. data/bundler/lib/bundler/ruby_version.rb +9 -37
  167. data/bundler/lib/bundler/rubygems_ext.rb +235 -92
  168. data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -21
  169. data/bundler/lib/bundler/rubygems_integration.rb +179 -515
  170. data/bundler/lib/bundler/runtime.rb +25 -40
  171. data/bundler/lib/bundler/self_manager.rb +168 -0
  172. data/bundler/lib/bundler/settings.rb +162 -118
  173. data/bundler/lib/bundler/setup.rb +11 -12
  174. data/bundler/lib/bundler/shared_helpers.rb +61 -102
  175. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  176. data/bundler/lib/bundler/source/git/git_proxy.rb +257 -128
  177. data/bundler/lib/bundler/source/git.rb +84 -61
  178. data/bundler/lib/bundler/source/metadata.rb +9 -9
  179. data/bundler/lib/bundler/source/path/installer.rb +11 -32
  180. data/bundler/lib/bundler/source/path.rb +28 -17
  181. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  182. data/bundler/lib/bundler/source/rubygems.rb +171 -197
  183. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  184. data/bundler/lib/bundler/source.rb +30 -10
  185. data/bundler/lib/bundler/source_list.rb +112 -67
  186. data/bundler/lib/bundler/source_map.rb +71 -0
  187. data/bundler/lib/bundler/spec_set.rb +86 -72
  188. data/bundler/lib/bundler/stub_specification.rb +45 -37
  189. data/bundler/lib/bundler/templates/Executable +3 -5
  190. data/bundler/lib/bundler/templates/Executable.bundler +21 -17
  191. data/bundler/lib/bundler/templates/Executable.standalone +4 -4
  192. data/bundler/lib/bundler/templates/Gemfile +0 -2
  193. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  194. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  195. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  196. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +22 -2
  197. data/bundler/lib/bundler/templates/newgem/README.md.tt +13 -15
  198. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +33 -5
  199. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  200. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  201. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  202. data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +2 -0
  203. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  204. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  205. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  206. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  207. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  208. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  209. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  210. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +36 -41
  211. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  212. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  213. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  214. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  215. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  216. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  217. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  218. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  219. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  220. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  221. data/bundler/lib/bundler/ui/shell.rb +39 -20
  222. data/bundler/lib/bundler/ui/silent.rb +21 -5
  223. data/bundler/lib/bundler/ui.rb +3 -3
  224. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  225. data/bundler/lib/bundler/vendor/.document +1 -0
  226. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  227. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  228. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  229. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  230. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  231. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  232. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1493 -425
  233. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  234. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  235. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  236. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  237. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  238. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  239. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  240. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  241. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  242. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +155 -0
  243. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  244. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  245. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  246. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  247. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  248. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  249. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  250. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  251. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  252. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  253. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  254. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  255. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  256. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  257. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  258. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  259. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +25 -14
  260. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +20 -10
  261. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +34 -15
  262. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  263. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  264. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  265. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
  266. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  267. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  268. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  269. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  270. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  271. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  272. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  273. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  274. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +40 -6
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +88 -13
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  284. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  285. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  286. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  287. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  288. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  289. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  290. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  291. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  292. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  293. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  294. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  295. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  296. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  297. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  298. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  299. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  300. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  301. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  302. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  303. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  304. data/bundler/lib/bundler/vendored_persistent.rb +2 -39
  305. data/bundler/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  306. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  307. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  308. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  309. data/bundler/lib/bundler/version.rb +5 -20
  310. data/bundler/lib/bundler/vlad.rb +2 -2
  311. data/bundler/lib/bundler/worker.rb +26 -15
  312. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  313. data/bundler/lib/bundler.rb +285 -183
  314. data/hide_lib_for_update/note.txt +0 -4
  315. data/lib/rubygems/available_set.rb +7 -8
  316. data/lib/rubygems/basic_specification.rb +44 -31
  317. data/lib/rubygems/bundler_version_finder.rb +28 -50
  318. data/lib/rubygems/command.rb +104 -46
  319. data/lib/rubygems/command_manager.rb +35 -16
  320. data/lib/rubygems/commands/build_command.rb +77 -26
  321. data/lib/rubygems/commands/cert_command.rb +78 -76
  322. data/lib/rubygems/commands/check_command.rb +20 -22
  323. data/lib/rubygems/commands/cleanup_command.rb +36 -32
  324. data/lib/rubygems/commands/contents_command.rb +16 -18
  325. data/lib/rubygems/commands/dependency_command.rb +39 -50
  326. data/lib/rubygems/commands/environment_command.rb +11 -13
  327. data/lib/rubygems/commands/fetch_command.rb +33 -16
  328. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  329. data/lib/rubygems/commands/help_command.rb +7 -7
  330. data/lib/rubygems/commands/info_command.rb +11 -6
  331. data/lib/rubygems/commands/install_command.rb +45 -79
  332. data/lib/rubygems/commands/list_command.rb +9 -8
  333. data/lib/rubygems/commands/lock_command.rb +7 -9
  334. data/lib/rubygems/commands/mirror_command.rb +3 -4
  335. data/lib/rubygems/commands/open_command.rb +11 -14
  336. data/lib/rubygems/commands/outdated_command.rb +5 -6
  337. data/lib/rubygems/commands/owner_command.rb +29 -22
  338. data/lib/rubygems/commands/pristine_command.rb +61 -51
  339. data/lib/rubygems/commands/push_command.rb +26 -63
  340. data/lib/rubygems/commands/query_command.rb +21 -337
  341. data/lib/rubygems/commands/rdoc_command.rb +26 -26
  342. data/lib/rubygems/commands/search_command.rb +8 -8
  343. data/lib/rubygems/commands/server_command.rb +16 -77
  344. data/lib/rubygems/commands/setup_command.rb +282 -241
  345. data/lib/rubygems/commands/signin_command.rb +9 -10
  346. data/lib/rubygems/commands/signout_command.rb +7 -9
  347. data/lib/rubygems/commands/sources_command.rb +42 -26
  348. data/lib/rubygems/commands/specification_command.rb +25 -20
  349. data/lib/rubygems/commands/stale_command.rb +3 -3
  350. data/lib/rubygems/commands/uninstall_command.rb +58 -49
  351. data/lib/rubygems/commands/unpack_command.rb +15 -44
  352. data/lib/rubygems/commands/update_command.rb +133 -81
  353. data/lib/rubygems/commands/which_command.rb +8 -11
  354. data/lib/rubygems/commands/yank_command.rb +22 -19
  355. data/lib/rubygems/compatibility.rb +7 -5
  356. data/lib/rubygems/config_file.rb +101 -47
  357. data/lib/rubygems/core_ext/kernel_gem.rb +8 -12
  358. data/lib/rubygems/core_ext/kernel_require.rb +124 -83
  359. data/lib/rubygems/core_ext/kernel_warn.rb +35 -30
  360. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  361. data/lib/rubygems/defaults.rb +131 -55
  362. data/lib/rubygems/dependency.rb +44 -27
  363. data/lib/rubygems/dependency_installer.rb +49 -205
  364. data/lib/rubygems/dependency_list.rb +24 -25
  365. data/lib/rubygems/deprecate.rb +106 -12
  366. data/lib/rubygems/doctor.rb +22 -22
  367. data/lib/rubygems/errors.rb +8 -14
  368. data/lib/rubygems/exceptions.rb +35 -33
  369. data/lib/rubygems/ext/build_error.rb +2 -0
  370. data/lib/rubygems/ext/builder.rb +71 -95
  371. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  372. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  373. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  374. data/lib/rubygems/ext/configure_builder.rb +5 -8
  375. data/lib/rubygems/ext/ext_conf_builder.rb +45 -65
  376. data/lib/rubygems/ext/rake_builder.rb +7 -10
  377. data/lib/rubygems/ext.rb +7 -6
  378. data/lib/rubygems/gem_runner.rb +15 -26
  379. data/lib/rubygems/gemcutter_utilities.rb +179 -54
  380. data/lib/rubygems/indexer.rb +38 -53
  381. data/lib/rubygems/install_default_message.rb +2 -2
  382. data/lib/rubygems/install_message.rb +2 -2
  383. data/lib/rubygems/install_update_options.rb +73 -64
  384. data/lib/rubygems/installer.rb +230 -173
  385. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  386. data/lib/rubygems/local_remote_options.rb +22 -24
  387. data/lib/rubygems/mock_gem_ui.rb +2 -5
  388. data/lib/rubygems/name_tuple.rb +10 -14
  389. data/lib/rubygems/openssl.rb +7 -0
  390. data/lib/rubygems/optparse/.document +1 -0
  391. data/lib/rubygems/optparse/COPYING +56 -0
  392. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  393. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  394. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  395. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  396. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  397. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  398. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  399. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  400. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  401. data/lib/rubygems/optparse.rb +3 -0
  402. data/lib/rubygems/package/digest_io.rb +0 -2
  403. data/lib/rubygems/package/file_source.rb +2 -4
  404. data/lib/rubygems/package/io_source.rb +4 -2
  405. data/lib/rubygems/package/old.rb +9 -11
  406. data/lib/rubygems/package/tar_header.rb +73 -66
  407. data/lib/rubygems/package/tar_reader/entry.rb +8 -9
  408. data/lib/rubygems/package/tar_reader.rb +16 -13
  409. data/lib/rubygems/package/tar_writer.rb +12 -22
  410. data/lib/rubygems/package.rb +142 -125
  411. data/lib/rubygems/package_task.rb +5 -11
  412. data/lib/rubygems/path_support.rb +3 -8
  413. data/lib/rubygems/platform.rb +113 -73
  414. data/lib/rubygems/psych_tree.rb +1 -1
  415. data/lib/rubygems/query_utils.rb +351 -0
  416. data/lib/rubygems/rdoc.rb +4 -16
  417. data/lib/rubygems/remote_fetcher.rb +64 -136
  418. data/lib/rubygems/request/connection_pools.rb +7 -11
  419. data/lib/rubygems/request/http_pool.rb +2 -3
  420. data/lib/rubygems/request.rb +31 -32
  421. data/lib/rubygems/request_set/gem_dependency_api.rb +135 -136
  422. data/lib/rubygems/request_set/lockfile/parser.rb +28 -28
  423. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -5
  424. data/lib/rubygems/request_set/lockfile.rb +21 -20
  425. data/lib/rubygems/request_set.rb +30 -43
  426. data/lib/rubygems/requirement.rb +42 -64
  427. data/lib/rubygems/resolver/activation_request.rb +29 -53
  428. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  429. data/lib/rubygems/resolver/api_set.rb +33 -26
  430. data/lib/rubygems/resolver/api_specification.rb +30 -16
  431. data/lib/rubygems/resolver/best_set.rb +9 -11
  432. data/lib/rubygems/resolver/composed_set.rb +3 -5
  433. data/lib/rubygems/resolver/conflict.rb +12 -19
  434. data/lib/rubygems/resolver/current_set.rb +0 -2
  435. data/lib/rubygems/resolver/dependency_request.rb +3 -5
  436. data/lib/rubygems/resolver/git_set.rb +2 -4
  437. data/lib/rubygems/resolver/git_specification.rb +6 -8
  438. data/lib/rubygems/resolver/index_set.rb +4 -6
  439. data/lib/rubygems/resolver/index_specification.rb +38 -7
  440. data/lib/rubygems/resolver/installed_specification.rb +4 -6
  441. data/lib/rubygems/resolver/installer_set.rb +69 -27
  442. data/lib/rubygems/resolver/local_specification.rb +2 -4
  443. data/lib/rubygems/resolver/lock_set.rb +7 -9
  444. data/lib/rubygems/resolver/lock_specification.rb +6 -8
  445. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  446. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  447. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  448. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  449. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  450. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  451. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  452. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  453. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  454. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  455. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  456. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  457. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +42 -9
  458. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +82 -8
  459. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  460. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  461. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  462. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  463. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  464. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  465. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  466. data/lib/rubygems/resolver/molinillo.rb +1 -1
  467. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  468. data/lib/rubygems/resolver/set.rb +0 -3
  469. data/lib/rubygems/resolver/source_set.rb +0 -2
  470. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  471. data/lib/rubygems/resolver/specification.rb +14 -3
  472. data/lib/rubygems/resolver/vendor_set.rb +1 -3
  473. data/lib/rubygems/resolver/vendor_specification.rb +3 -5
  474. data/lib/rubygems/resolver.rb +58 -54
  475. data/lib/rubygems/s3_uri_signer.rb +175 -0
  476. data/lib/rubygems/safe_yaml.rb +14 -16
  477. data/lib/rubygems/security/policies.rb +47 -47
  478. data/lib/rubygems/security/policy.rb +25 -29
  479. data/lib/rubygems/security/signer.rb +16 -18
  480. data/lib/rubygems/security/trust_dir.rb +5 -6
  481. data/lib/rubygems/security.rb +90 -69
  482. data/lib/rubygems/security_option.rb +7 -8
  483. data/lib/rubygems/source/git.rb +30 -30
  484. data/lib/rubygems/source/installed.rb +1 -3
  485. data/lib/rubygems/source/local.rb +4 -6
  486. data/lib/rubygems/source/lock.rb +0 -2
  487. data/lib/rubygems/source/specific_file.rb +1 -3
  488. data/lib/rubygems/source/vendor.rb +0 -2
  489. data/lib/rubygems/source.rb +50 -38
  490. data/lib/rubygems/source_list.rb +9 -13
  491. data/lib/rubygems/spec_fetcher.rb +52 -64
  492. data/lib/rubygems/specification.rb +432 -463
  493. data/lib/rubygems/specification_policy.rb +185 -87
  494. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  495. data/lib/rubygems/stub_specification.rb +24 -29
  496. data/lib/rubygems/text.rb +21 -21
  497. data/lib/rubygems/tsort/.document +1 -0
  498. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  499. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  500. data/lib/rubygems/tsort.rb +3 -0
  501. data/lib/rubygems/uninstaller.rb +110 -57
  502. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  503. data/lib/rubygems/update_suggestion.rb +69 -0
  504. data/lib/rubygems/uri.rb +126 -0
  505. data/lib/rubygems/uri_formatter.rb +2 -4
  506. data/lib/rubygems/user_interaction.rb +46 -49
  507. data/lib/rubygems/util/licenses.rb +511 -404
  508. data/lib/rubygems/util.rb +40 -56
  509. data/lib/rubygems/validator.rb +15 -37
  510. data/lib/rubygems/version.rb +48 -29
  511. data/lib/rubygems/version_option.rb +11 -5
  512. data/lib/rubygems.rb +305 -332
  513. data/rubygems-update.gemspec +6 -13
  514. data/setup.rb +11 -22
  515. data/test/rubygems/alternate_cert.pem +14 -14
  516. data/test/rubygems/alternate_cert_32.pem +15 -15
  517. data/test/rubygems/alternate_key.pem +25 -25
  518. data/test/rubygems/bundler_test_gem.rb +419 -0
  519. data/test/rubygems/ca_cert.pem +74 -65
  520. data/test/rubygems/child_cert.pem +15 -16
  521. data/test/rubygems/child_cert_32.pem +15 -16
  522. data/test/rubygems/child_key.pem +25 -25
  523. data/test/rubygems/client.pem +103 -45
  524. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  525. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  526. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  527. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  528. data/test/rubygems/encrypted_private_key.pem +26 -26
  529. data/test/rubygems/expired_cert.pem +15 -15
  530. data/test/rubygems/future_cert.pem +15 -15
  531. data/test/rubygems/future_cert_32.pem +15 -15
  532. data/test/rubygems/grandchild_cert.pem +15 -16
  533. data/test/rubygems/grandchild_cert_32.pem +15 -16
  534. data/test/rubygems/grandchild_key.pem +25 -25
  535. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +505 -507
  536. data/{lib → test}/rubygems/installer_test_case.rb +115 -53
  537. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  538. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  539. data/test/rubygems/invalid_key.pem +25 -25
  540. data/test/rubygems/invalid_signer_cert.pem +15 -15
  541. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  542. data/test/rubygems/invalidchild_cert.pem +15 -16
  543. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  544. data/test/rubygems/invalidchild_key.pem +25 -25
  545. data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
  546. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  547. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  548. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  549. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  550. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  551. data/test/rubygems/private_ec_key.pem +9 -0
  552. data/test/rubygems/private_key.pem +25 -25
  553. data/test/rubygems/public_cert.pem +16 -16
  554. data/test/rubygems/public_cert_32.pem +15 -15
  555. data/test/rubygems/public_key.pem +7 -7
  556. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  557. data/test/rubygems/rubygems_plugin.rb +2 -4
  558. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  559. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  560. data/test/rubygems/ssl_cert.pem +78 -17
  561. data/test/rubygems/ssl_key.pem +25 -13
  562. data/test/rubygems/test_bundled_ca.rb +44 -47
  563. data/test/rubygems/test_config.rb +5 -7
  564. data/test/rubygems/test_deprecate.rb +90 -10
  565. data/test/rubygems/test_exit.rb +17 -0
  566. data/test/rubygems/test_gem.rb +679 -885
  567. data/test/rubygems/test_gem_available_set.rb +24 -25
  568. data/test/rubygems/test_gem_bundler_version_finder.rb +42 -42
  569. data/test/rubygems/test_gem_command.rb +186 -39
  570. data/test/rubygems/test_gem_command_manager.rb +166 -36
  571. data/test/rubygems/test_gem_commands_build_command.rb +436 -52
  572. data/test/rubygems/test_gem_commands_cert_command.rb +193 -124
  573. data/test/rubygems/test_gem_commands_check_command.rb +9 -11
  574. data/test/rubygems/test_gem_commands_cleanup_command.rb +87 -62
  575. data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
  576. data/test/rubygems/test_gem_commands_dependency_command.rb +39 -41
  577. data/test/rubygems/test_gem_commands_environment_command.rb +60 -48
  578. data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
  579. data/test/rubygems/test_gem_commands_generate_index_command.rb +39 -9
  580. data/test/rubygems/test_gem_commands_help_command.rb +34 -19
  581. data/test/rubygems/test_gem_commands_info_command.rb +34 -9
  582. data/test/rubygems/test_gem_commands_install_command.rb +600 -173
  583. data/test/rubygems/test_gem_commands_list_command.rb +5 -7
  584. data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
  585. data/test/rubygems/test_gem_commands_mirror.rb +3 -4
  586. data/test/rubygems/test_gem_commands_open_command.rb +16 -19
  587. data/test/rubygems/test_gem_commands_outdated_command.rb +24 -7
  588. data/test/rubygems/test_gem_commands_owner_command.rb +183 -49
  589. data/test/rubygems/test_gem_commands_pristine_command.rb +222 -89
  590. data/test/rubygems/test_gem_commands_push_command.rb +178 -69
  591. data/test/rubygems/test_gem_commands_query_command.rb +114 -89
  592. data/test/rubygems/test_gem_commands_search_command.rb +2 -4
  593. data/test/rubygems/test_gem_commands_server_command.rb +6 -46
  594. data/test/rubygems/test_gem_commands_setup_command.rb +334 -157
  595. data/test/rubygems/test_gem_commands_signin_command.rb +187 -27
  596. data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
  597. data/test/rubygems/test_gem_commands_sources_command.rb +266 -33
  598. data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
  599. data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
  600. data/test/rubygems/test_gem_commands_uninstall_command.rb +230 -95
  601. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
  602. data/test/rubygems/test_gem_commands_update_command.rb +412 -102
  603. data/test/rubygems/test_gem_commands_which_command.rb +12 -14
  604. data/test/rubygems/test_gem_commands_yank_command.rb +107 -26
  605. data/test/rubygems/test_gem_config_file.rb +120 -96
  606. data/test/rubygems/test_gem_dependency.rb +94 -86
  607. data/test/rubygems/test_gem_dependency_installer.rb +305 -388
  608. data/test/rubygems/test_gem_dependency_list.rb +66 -61
  609. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
  610. data/test/rubygems/test_gem_doctor.rb +73 -47
  611. data/test/rubygems/test_gem_ext_builder.rb +116 -106
  612. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  613. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +8 -0
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +233 -0
  615. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  616. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  617. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +1 -0
  618. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  619. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +233 -0
  620. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  621. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  622. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  623. data/test/rubygems/test_gem_ext_cargo_builder.rb +166 -0
  624. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  625. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  626. data/test/rubygems/test_gem_ext_cmake_builder.rb +32 -37
  627. data/test/rubygems/test_gem_ext_configure_builder.rb +23 -31
  628. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +75 -79
  629. data/test/rubygems/test_gem_ext_rake_builder.rb +49 -30
  630. data/test/rubygems/test_gem_gem_runner.rb +52 -7
  631. data/test/rubygems/test_gem_gemcutter_utilities.rb +91 -76
  632. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
  633. data/test/rubygems/test_gem_indexer.rb +120 -105
  634. data/test/rubygems/test_gem_install_update_options.rb +57 -33
  635. data/test/rubygems/test_gem_installer.rb +1230 -644
  636. data/test/rubygems/test_gem_local_remote_options.rb +11 -13
  637. data/test/rubygems/test_gem_name_tuple.rb +4 -6
  638. data/test/rubygems/test_gem_package.rb +396 -266
  639. data/test/rubygems/test_gem_package_old.rb +57 -56
  640. data/test/rubygems/test_gem_package_tar_header.rb +108 -50
  641. data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
  642. data/test/rubygems/test_gem_package_tar_reader_entry.rb +77 -20
  643. data/test/rubygems/test_gem_package_tar_writer.rb +107 -101
  644. data/test/rubygems/test_gem_package_task.rb +58 -25
  645. data/test/rubygems/test_gem_path_support.rb +29 -29
  646. data/test/rubygems/test_gem_platform.rb +388 -199
  647. data/test/rubygems/test_gem_rdoc.rb +20 -155
  648. data/test/rubygems/test_gem_remote_fetcher.rb +474 -303
  649. data/test/rubygems/test_gem_request.rb +128 -85
  650. data/test/rubygems/test_gem_request_connection_pools.rb +32 -32
  651. data/test/rubygems/test_gem_request_set.rb +186 -110
  652. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +280 -261
  653. data/test/rubygems/test_gem_request_set_lockfile.rb +93 -94
  654. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -69
  655. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -136
  656. data/test/rubygems/test_gem_requirement.rb +140 -55
  657. data/test/rubygems/test_gem_resolver.rb +224 -115
  658. data/test/rubygems/test_gem_resolver_activation_request.rb +9 -40
  659. data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
  660. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
  661. data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
  662. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
  663. data/test/rubygems/test_gem_resolver_conflict.rb +12 -18
  664. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
  665. data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
  666. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -22
  667. data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
  668. data/test/rubygems/test_gem_resolver_index_specification.rb +21 -18
  669. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -8
  670. data/test/rubygems/test_gem_resolver_installer_set.rb +106 -44
  671. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
  672. data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
  673. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
  674. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
  675. data/test/rubygems/test_gem_resolver_specification.rb +8 -10
  676. data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
  677. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
  678. data/test/rubygems/test_gem_security.rb +109 -79
  679. data/test/rubygems/test_gem_security_policy.rb +102 -107
  680. data/test/rubygems/test_gem_security_signer.rb +51 -52
  681. data/test/rubygems/test_gem_security_trust_dir.rb +14 -16
  682. data/test/rubygems/test_gem_silent_ui.rb +47 -42
  683. data/test/rubygems/test_gem_source.rb +66 -51
  684. data/test/rubygems/test_gem_source_fetch_problem.rb +17 -8
  685. data/test/rubygems/test_gem_source_git.rb +74 -74
  686. data/test/rubygems/test_gem_source_installed.rb +16 -18
  687. data/test/rubygems/test_gem_source_list.rb +5 -5
  688. data/test/rubygems/test_gem_source_local.rb +15 -16
  689. data/test/rubygems/test_gem_source_lock.rb +31 -33
  690. data/test/rubygems/test_gem_source_specific_file.rb +18 -19
  691. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  692. data/test/rubygems/test_gem_source_vendor.rb +13 -15
  693. data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
  694. data/test/rubygems/test_gem_specification.rb +1051 -1071
  695. data/test/rubygems/test_gem_stream_ui.rb +25 -23
  696. data/test/rubygems/test_gem_stub_specification.rb +39 -56
  697. data/test/rubygems/test_gem_text.rb +8 -3
  698. data/test/rubygems/test_gem_uninstaller.rb +269 -100
  699. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
  700. data/test/rubygems/test_gem_update_suggestion.rb +208 -0
  701. data/test/rubygems/test_gem_uri.rb +39 -0
  702. data/test/rubygems/test_gem_uri_formatter.rb +14 -16
  703. data/test/rubygems/test_gem_util.rb +46 -34
  704. data/test/rubygems/test_gem_validator.rb +12 -15
  705. data/test/rubygems/test_gem_version.rb +49 -34
  706. data/test/rubygems/test_gem_version_option.rb +16 -18
  707. data/test/rubygems/test_kernel.rb +61 -53
  708. data/test/rubygems/test_project_sanity.rb +20 -0
  709. data/test/rubygems/test_remote_fetch_error.rb +7 -8
  710. data/test/rubygems/test_require.rb +415 -121
  711. data/test/rubygems/test_rubygems.rb +74 -0
  712. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +74 -50
  713. data/test/rubygems/wrong_key_cert.pem +15 -15
  714. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  715. data/test/test_changelog_generator.rb +17 -0
  716. metadata +218 -244
  717. data/.rubocop.yml +0 -66
  718. data/.travis.yml +0 -38
  719. data/History.txt +0 -3965
  720. data/Rakefile +0 -372
  721. data/appveyor.yml +0 -43
  722. data/bundler/CODE_OF_CONDUCT.md +0 -42
  723. data/bundler/CONTRIBUTING.md +0 -17
  724. data/bundler/exe/bundle_ruby +0 -60
  725. data/bundler/lib/bundler/cli/package.rb +0 -49
  726. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  727. data/bundler/lib/bundler/dep_proxy.rb +0 -48
  728. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  729. data/bundler/lib/bundler/gemdeps.rb +0 -29
  730. data/bundler/lib/bundler/psyched_yaml.rb +0 -37
  731. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  732. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  733. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  734. data/bundler/lib/bundler/templates/gems.rb +0 -8
  735. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  736. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  737. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  738. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  739. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  740. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  741. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  742. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  743. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  744. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  745. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  746. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  747. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  748. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  749. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  750. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  751. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  752. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  753. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  754. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  755. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  756. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  757. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  758. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  759. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  760. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  761. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  762. data/bundler/lib/bundler/version_ranges.rb +0 -76
  763. data/bundler/man/bundle-gem.1 +0 -80
  764. data/bundler/man/bundle-gem.ronn +0 -78
  765. data/bundler/man/bundle-package.1 +0 -55
  766. data/lib/rubygems/psych_additions.rb +0 -10
  767. data/lib/rubygems/server.rb +0 -878
  768. data/lib/rubygems/source_local.rb +0 -7
  769. data/lib/rubygems/source_specific_file.rb +0 -6
  770. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  771. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  772. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  773. data/lib/rubygems/syck_hack.rb +0 -77
  774. data/lib/ubygems.rb +0 -14
  775. data/test/rubygems/bogussources.rb +0 -9
  776. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  777. data/test/rubygems/test_gem_server.rb +0 -607
  778. data/util/CL2notes +0 -55
  779. data/util/ci +0 -77
  780. data/util/create_certs.rb +0 -171
  781. data/util/create_encrypted_key.rb +0 -16
  782. data/util/generate_spdx_license_list.rb +0 -61
  783. data/util/patch_with_prs.rb +0 -77
  784. data/util/rubocop +0 -8
  785. data/util/update_bundled_ca_certificates.rb +0 -139
  786. data/util/update_changelog.rb +0 -67
  787. /data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  788. /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  789. /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  790. /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  791. /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  792. /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  793. /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  794. /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  795. /data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
data/lib/rubygems.rb CHANGED
@@ -1,23 +1,22 @@
1
1
  # frozen_string_literal: true
2
- # -*- ruby -*-
3
2
  #--
4
3
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
5
4
  # All rights reserved.
6
5
  # See LICENSE.txt for permissions.
7
6
  #++
8
7
 
9
- require 'rbconfig'
8
+ require "rbconfig"
10
9
 
11
10
  module Gem
12
- VERSION = "3.0.3".freeze
11
+ VERSION = "3.4.7".freeze
13
12
  end
14
13
 
15
14
  # Must be first since it unloads the prelude from 1.9.2
16
- require 'rubygems/compatibility'
15
+ require_relative "rubygems/compatibility"
17
16
 
18
- require 'rubygems/defaults'
19
- require 'rubygems/deprecate'
20
- require 'rubygems/errors'
17
+ require_relative "rubygems/defaults"
18
+ require_relative "rubygems/deprecate"
19
+ require_relative "rubygems/errors"
21
20
 
22
21
  ##
23
22
  # RubyGems is the Ruby standard for publishing and managing third party
@@ -26,30 +25,30 @@ require 'rubygems/errors'
26
25
  # For user documentation, see:
27
26
  #
28
27
  # * <tt>gem help</tt> and <tt>gem help [command]</tt>
29
- # * {RubyGems User Guide}[http://guides.rubygems.org/]
30
- # * {Frequently Asked Questions}[http://guides.rubygems.org/faqs]
28
+ # * {RubyGems User Guide}[https://guides.rubygems.org/]
29
+ # * {Frequently Asked Questions}[https://guides.rubygems.org/faqs]
31
30
  #
32
31
  # For gem developer documentation see:
33
32
  #
34
- # * {Creating Gems}[http://guides.rubygems.org/make-your-own-gem]
33
+ # * {Creating Gems}[https://guides.rubygems.org/make-your-own-gem]
35
34
  # * Gem::Specification
36
35
  # * Gem::Version for version dependency notes
37
36
  #
38
37
  # Further RubyGems documentation can be found at:
39
38
  #
40
- # * {RubyGems Guides}[http://guides.rubygems.org]
41
- # * {RubyGems API}[http://www.rubydoc.info/github/rubygems/rubygems] (also available from
39
+ # * {RubyGems Guides}[https://guides.rubygems.org]
40
+ # * {RubyGems API}[https://www.rubydoc.info/github/rubygems/rubygems] (also available from
42
41
  # <tt>gem server</tt>)
43
42
  #
44
43
  # == RubyGems Plugins
45
44
  #
46
- # As of RubyGems 1.3.2, RubyGems will load plugins installed in gems or
45
+ # RubyGems will load plugins in the latest version of each installed gem or
47
46
  # $LOAD_PATH. Plugins must be named 'rubygems_plugin' (.rb, .so, etc) and
48
- # placed at the root of your gem's #require_path. Plugins are discovered via
49
- # Gem::find_files and then loaded.
47
+ # placed at the root of your gem's #require_path. Plugins are installed at a
48
+ # special location and loaded on boot.
50
49
  #
51
50
  # For an example plugin, see the {Graph gem}[https://github.com/seattlerb/graph]
52
- # which adds a `gem graph` command.
51
+ # which adds a <tt>gem graph</tt> command.
53
52
  #
54
53
  # == RubyGems Defaults, Packaging
55
54
  #
@@ -112,9 +111,13 @@ require 'rubygems/errors'
112
111
  #
113
112
  # -The RubyGems Team
114
113
 
115
-
116
114
  module Gem
117
- RUBYGEMS_DIR = File.dirname File.expand_path(__FILE__)
115
+ RUBYGEMS_DIR = __dir__
116
+
117
+ # Taint support is deprecated in Ruby 2.7.
118
+ # This allows switching ".untaint" to ".tap(&Gem::UNTAINT)",
119
+ # to avoid deprecation warnings in Ruby 2.7.
120
+ UNTAINT = RUBY_VERSION < "2.7" ? :untaint.to_sym : proc {}
118
121
 
119
122
  ##
120
123
  # An Array of Regexps that match windows Ruby platforms.
@@ -144,6 +147,7 @@ module Gem
144
147
  doc
145
148
  extensions
146
149
  gems
150
+ plugins
147
151
  specifications
148
152
  ].freeze
149
153
 
@@ -155,34 +159,12 @@ module Gem
155
159
  specifications/default
156
160
  ].freeze
157
161
 
158
- ##
159
- # Exception classes used in a Gem.read_binary +rescue+ statement. Not all of
160
- # these are defined in Ruby 1.8.7, hence the need for this convoluted setup.
161
-
162
- READ_BINARY_ERRORS = begin
163
- read_binary_errors = [Errno::EACCES, Errno::EROFS, Errno::ENOSYS]
164
- read_binary_errors << Errno::ENOTSUP if Errno.const_defined?(:ENOTSUP)
165
- read_binary_errors
166
- end.freeze
167
-
168
- ##
169
- # Exception classes used in Gem.write_binary +rescue+ statement. Not all of
170
- # these are defined in Ruby 1.8.7.
171
-
172
- WRITE_BINARY_ERRORS = begin
173
- write_binary_errors = [Errno::ENOSYS]
174
- write_binary_errors << Errno::ENOTSUP if Errno.const_defined?(:ENOTSUP)
175
- write_binary_errors
176
- end.freeze
177
-
178
- USE_BUNDLER_FOR_GEMDEPS = !ENV['DONT_USE_BUNDLER_FOR_GEMDEPS'] # :nodoc:
179
-
180
162
  @@win_platform = nil
181
163
 
182
164
  @configuration = nil
183
165
  @gemdeps = nil
184
166
  @loaded_specs = {}
185
- LOADED_SPECS_MUTEX = Mutex.new
167
+ LOADED_SPECS_MUTEX = Thread::Mutex.new
186
168
  @path_to_default_spec_map = {}
187
169
  @platforms = []
188
170
  @ruby = nil
@@ -197,6 +179,10 @@ module Gem
197
179
  @pre_reset_hooks ||= []
198
180
  @post_reset_hooks ||= []
199
181
 
182
+ @default_source_date_epoch = nil
183
+
184
+ @discover_gems_on_require = true
185
+
200
186
  ##
201
187
  # Try to activate a gem containing +path+. Returns true if
202
188
  # activation succeeded or wasn't needed because it was already
@@ -251,11 +237,6 @@ module Gem
251
237
  # you to specify specific gem versions.
252
238
 
253
239
  def self.bin_path(name, exec_name = nil, *requirements)
254
- # TODO: fails test_self_bin_path_bin_file_gone_in_latest
255
- # Gem::Specification.find_by_name(name, *requirements).bin_file exec_name
256
-
257
- raise ArgumentError, "you must supply exec_name" unless exec_name
258
-
259
240
  requirements = Gem::Requirement.default if
260
241
  requirements.empty?
261
242
 
@@ -263,6 +244,8 @@ module Gem
263
244
  end
264
245
 
265
246
  def self.find_spec_for_exe(name, exec_name, requirements)
247
+ raise ArgumentError, "you must supply exec_name" unless exec_name
248
+
266
249
  dep = Gem::Dependency.new name, requirements
267
250
 
268
251
  loaded = Gem.loaded_specs[name]
@@ -271,15 +254,12 @@ module Gem
271
254
 
272
255
  specs = dep.matching_specs(true)
273
256
 
274
- specs = specs.find_all { |spec|
257
+ specs = specs.find_all do |spec|
275
258
  spec.executables.include? exec_name
276
- } if exec_name
259
+ end if exec_name
277
260
 
278
261
  unless spec = specs.first
279
262
  msg = "can't find gem #{dep} with executable #{exec_name}"
280
- if name == "bundler" && bundler_message = Gem::BundlerVersionFinder.missing_version_message
281
- msg = bundler_message
282
- end
283
263
  raise Gem::GemNotFoundException, msg
284
264
  end
285
265
 
@@ -298,8 +278,8 @@ module Gem
298
278
  #
299
279
  # This method should *only* be used in bin stub files.
300
280
 
301
- def self.activate_bin_path(name, exec_name, requirement) # :nodoc:
302
- spec = find_spec_for_exe name, exec_name, [requirement]
281
+ def self.activate_bin_path(name, exec_name = nil, *requirements) # :nodoc:
282
+ spec = find_spec_for_exe name, exec_name, requirements
303
283
  Gem::LOADED_SPECS_MUTEX.synchronize do
304
284
  spec.activate
305
285
  finish_resolve
@@ -311,18 +291,25 @@ module Gem
311
291
  # The mode needed to read a file as straight binary.
312
292
 
313
293
  def self.binary_mode
314
- 'rb'
294
+ "rb"
315
295
  end
316
296
 
317
297
  ##
318
298
  # The path where gem executables are to be installed.
319
299
 
320
300
  def self.bindir(install_dir=Gem.dir)
321
- return File.join install_dir, 'bin' unless
301
+ return File.join install_dir, "bin" unless
322
302
  install_dir.to_s == Gem.default_dir.to_s
323
303
  Gem.default_bindir
324
304
  end
325
305
 
306
+ ##
307
+ # The path were rubygems plugins are to be installed.
308
+
309
+ def self.plugindir(install_dir=Gem.dir)
310
+ File.join install_dir, "plugins"
311
+ end
312
+
326
313
  ##
327
314
  # Reset the +dir+ and +path+ values. The next time +dir+ or +path+
328
315
  # is requested, the values will be calculated from scratch. This is
@@ -335,13 +322,6 @@ module Gem
335
322
  Gem::Security.reset if defined?(Gem::Security)
336
323
  end
337
324
 
338
- ##
339
- # The path to standard location of the user's .gemrc file.
340
-
341
- def self.config_file
342
- @config_file ||= File.join Gem.user_home, '.gemrc'
343
- end
344
-
345
325
  ##
346
326
  # The standard configuration object for gems.
347
327
 
@@ -371,7 +351,7 @@ module Gem
371
351
  # A Zlib::Deflate.deflate wrapper
372
352
 
373
353
  def self.deflate(data)
374
- require 'zlib'
354
+ require "zlib"
375
355
  Zlib::Deflate.deflate data
376
356
  end
377
357
 
@@ -393,17 +373,17 @@ module Gem
393
373
  target = {}
394
374
  env.each_pair do |k,v|
395
375
  case k
396
- when 'GEM_HOME', 'GEM_PATH', 'GEM_SPEC_CACHE'
376
+ when "GEM_HOME", "GEM_PATH", "GEM_SPEC_CACHE"
397
377
  case v
398
378
  when nil, String
399
379
  target[k] = v
400
380
  when Array
401
381
  unless Gem::Deprecate.skip
402
- warn <<-eowarn
382
+ warn <<-EOWARN
403
383
  Array values in the parameter to `Gem.paths=` are deprecated.
404
384
  Please use a String or nil.
405
385
  An Array (#{env.inspect}) was passed in from #{caller[3]}
406
- eowarn
386
+ EOWARN
407
387
  end
408
388
  target[k] = v.join File::PATH_SEPARATOR
409
389
  end
@@ -417,8 +397,6 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
417
397
 
418
398
  ##
419
399
  # The path where gems are to be installed.
420
- #--
421
- # FIXME deprecate these once everything else has been done -ebh
422
400
 
423
401
  def self.dir
424
402
  paths.home
@@ -462,8 +440,6 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
462
440
  old_umask = File.umask
463
441
  File.umask old_umask | 002
464
442
 
465
- require 'fileutils'
466
-
467
443
  options = {}
468
444
 
469
445
  options[:mode] = mode if mode
@@ -471,7 +447,13 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
471
447
  subdirs.each do |name|
472
448
  subdir = File.join dir, name
473
449
  next if File.exist? subdir
474
- FileUtils.mkdir_p subdir, options rescue nil
450
+
451
+ require "fileutils"
452
+
453
+ begin
454
+ FileUtils.mkdir_p subdir, **options
455
+ rescue SystemCallError
456
+ end
475
457
  end
476
458
  ensure
477
459
  File.umask old_umask
@@ -482,7 +464,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
482
464
  # distinction as extensions cannot be shared between the two.
483
465
 
484
466
  def self.extension_api_version # :nodoc:
485
- if 'no' == RbConfig::CONFIG['ENABLE_SHARED']
467
+ if "no" == RbConfig::CONFIG["ENABLE_SHARED"]
486
468
  "#{ruby_api_version}-static"
487
469
  else
488
470
  ruby_api_version
@@ -508,7 +490,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
508
490
 
509
491
  gem_specifications = @gemdeps ? Gem.loaded_specs.values : Gem::Specification.stubs
510
492
 
511
- files.concat gem_specifications.map { |spec|
493
+ files.concat gem_specifications.map {|spec|
512
494
  spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
513
495
  }.flatten
514
496
 
@@ -521,9 +503,9 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
521
503
 
522
504
  def self.find_files_from_load_path(glob) # :nodoc:
523
505
  glob_with_suffixes = "#{glob}#{Gem.suffix_pattern}"
524
- $LOAD_PATH.map { |load_path|
506
+ $LOAD_PATH.map do |load_path|
525
507
  Gem::Util.glob_files_in_dir(glob_with_suffixes, load_path)
526
- }.flatten.select { |file| File.file? file.untaint }
508
+ end.flatten.select {|file| File.file? file.tap(&Gem::UNTAINT) }
527
509
  end
528
510
 
529
511
  ##
@@ -543,7 +525,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
543
525
 
544
526
  files = find_files_from_load_path glob if check_load_path
545
527
 
546
- files.concat Gem::Specification.latest_specs(true).map { |spec|
528
+ files.concat Gem::Specification.latest_specs(true).map {|spec|
547
529
  spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
548
530
  }.flatten
549
531
 
@@ -554,83 +536,16 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
554
536
  return files
555
537
  end
556
538
 
557
- ##
558
- # Finds the user's home directory.
559
- #--
560
- # Some comments from the ruby-talk list regarding finding the home
561
- # directory:
562
- #
563
- # I have HOME, USERPROFILE and HOMEDRIVE + HOMEPATH. Ruby seems
564
- # to be depending on HOME in those code samples. I propose that
565
- # it should fallback to USERPROFILE and HOMEDRIVE + HOMEPATH (at
566
- # least on Win32).
567
- #++
568
- #--
569
- #
570
- # FIXME move to pathsupport
571
- #
572
- #++
573
-
574
- def self.find_home
575
- Dir.home.dup
576
- rescue
577
- if Gem.win_platform?
578
- File.expand_path File.join(ENV['HOMEDRIVE'] || ENV['SystemDrive'], '/')
579
- else
580
- File.expand_path "/"
581
- end
582
- end
583
-
584
- private_class_method :find_home
585
-
586
- # TODO: remove in RubyGems 4.0
587
-
588
- ##
589
- # Zlib::GzipReader wrapper that unzips +data+.
590
-
591
- def self.gunzip(data)
592
- Gem::Util.gunzip data
593
- end
594
-
595
- class << self
596
- extend Gem::Deprecate
597
- deprecate :gunzip, "Gem::Util.gunzip", 2018, 12
598
- end
599
-
600
- ##
601
- # Zlib::GzipWriter wrapper that zips +data+.
602
-
603
- def self.gzip(data)
604
- Gem::Util.gzip data
605
- end
606
-
607
- class << self
608
- extend Gem::Deprecate
609
- deprecate :gzip, "Gem::Util.gzip", 2018, 12
610
- end
611
-
612
- ##
613
- # A Zlib::Inflate#inflate wrapper
614
-
615
- def self.inflate(data)
616
- Gem::Util.inflate data
617
- end
618
-
619
- class << self
620
- extend Gem::Deprecate
621
- deprecate :inflate, "Gem::Util.inflate", 2018, 12
622
- end
623
-
624
539
  ##
625
540
  # Top level install helper method. Allows you to install gems interactively:
626
541
  #
627
542
  # % irb
628
543
  # >> Gem.install "minitest"
629
- # Fetching: minitest-3.0.1.gem (100%)
544
+ # Fetching: minitest-5.14.0.gem (100%)
630
545
  # => [#<Gem::Specification:0x1013b4528 @name="minitest", ...>]
631
546
 
632
547
  def self.install(name, version = Gem::Requirement.default, *options)
633
- require "rubygems/dependency_installer"
548
+ require_relative "rubygems/dependency_installer"
634
549
  inst = Gem::DependencyInstaller.new(*options)
635
550
  inst.install name, version
636
551
  inst.installed_gems
@@ -641,14 +556,12 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
641
556
  # <tt>https://rubygems.org</tt>.
642
557
 
643
558
  def self.host
644
- # TODO: move to utils
645
559
  @host ||= Gem::DEFAULT_HOST
646
560
  end
647
561
 
648
562
  ## Set the default RubyGems API host.
649
563
 
650
564
  def self.host=(host)
651
- # TODO: move to utils
652
565
  @host = host
653
566
  end
654
567
 
@@ -661,9 +574,27 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
661
574
  return i if path.instance_variable_defined?(:@gem_prelude_index)
662
575
  end
663
576
 
664
- index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir']
577
+ index = $LOAD_PATH.index RbConfig::CONFIG["sitelibdir"]
665
578
 
666
- index
579
+ index || 0
580
+ end
581
+
582
+ ##
583
+ # The number of paths in the +$LOAD_PATH+ from activated gems. Used to
584
+ # prioritize +-I+ and +ENV['RUBYLIB']+ entries during +require+.
585
+
586
+ def self.activated_gem_paths
587
+ @activated_gem_paths ||= 0
588
+ end
589
+
590
+ ##
591
+ # Add a list of paths to the $LOAD_PATH at the proper place.
592
+
593
+ def self.add_to_load_path(*paths)
594
+ @activated_gem_paths = activated_gem_paths + paths.size
595
+
596
+ # gem directories must come after -I and ENV['RUBYLIB']
597
+ $LOAD_PATH.insert(Gem.load_path_insert_index, *paths)
667
598
  end
668
599
 
669
600
  @yaml_loaded = false
@@ -673,37 +604,11 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
673
604
 
674
605
  def self.load_yaml
675
606
  return if @yaml_loaded
676
- return unless defined?(gem)
677
-
678
- begin
679
- gem 'psych', '>= 2.0.0'
680
- rescue Gem::LoadError
681
- # It's OK if the user does not have the psych gem installed. We will
682
- # attempt to require the stdlib version
683
- end
684
-
685
- begin
686
- # Try requiring the gem version *or* stdlib version of psych.
687
- require 'psych'
688
- rescue ::LoadError
689
- # If we can't load psych, thats fine, go on.
690
- else
691
- # If 'yaml' has already been required, then we have to
692
- # be sure to switch it over to the newly loaded psych.
693
- if defined?(YAML::ENGINE) && YAML::ENGINE.yamler != "psych"
694
- YAML::ENGINE.yamler = "psych"
695
- end
696
-
697
- require 'rubygems/psych_additions'
698
- require 'rubygems/psych_tree'
699
- end
700
607
 
701
- require 'yaml'
702
- require 'rubygems/safe_yaml'
608
+ require "psych"
609
+ require_relative "rubygems/psych_tree"
703
610
 
704
- # Now that we're sure some kind of yaml library is loaded, pull
705
- # in our hack to deal with Syck's DefaultKey ugliness.
706
- require 'rubygems/syck_hack'
611
+ require_relative "rubygems/safe_yaml"
707
612
 
708
613
  @yaml_loaded = true
709
614
  end
@@ -834,9 +739,9 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
834
739
  def self.prefix
835
740
  prefix = File.dirname RUBYGEMS_DIR
836
741
 
837
- if prefix != File.expand_path(RbConfig::CONFIG['sitelibdir']) and
838
- prefix != File.expand_path(RbConfig::CONFIG['libdir']) and
839
- 'lib' == File.basename(RUBYGEMS_DIR)
742
+ if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"]) &&
743
+ prefix != File.expand_path(RbConfig::CONFIG["libdir"]) &&
744
+ "lib" == File.basename(RUBYGEMS_DIR)
840
745
  prefix
841
746
  end
842
747
  end
@@ -852,40 +757,46 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
852
757
  # Safely read a file in binary mode on all platforms.
853
758
 
854
759
  def self.read_binary(path)
855
- File.open path, 'rb+' do |f|
856
- f.flock(File::LOCK_EX)
857
- f.read
760
+ open_file(path, "rb+") do |io|
761
+ io.read
858
762
  end
859
- rescue *READ_BINARY_ERRORS
860
- File.open path, 'rb' do |f|
861
- f.read
862
- end
863
- rescue Errno::ENOLCK # NFS
864
- if Thread.main != Thread.current
865
- raise
866
- else
867
- File.open path, 'rb' do |f|
868
- f.read
869
- end
763
+ rescue Errno::EACCES, Errno::EROFS
764
+ open_file(path, "rb") do |io|
765
+ io.read
870
766
  end
871
767
  end
872
768
 
873
769
  ##
874
770
  # Safely write a file in binary mode on all platforms.
875
771
  def self.write_binary(path, data)
876
- open(path, 'wb') do |io|
877
- begin
878
- io.flock(File::LOCK_EX)
879
- rescue *WRITE_BINARY_ERRORS
880
- end
772
+ open_file(path, "wb") do |io|
881
773
  io.write data
882
774
  end
775
+ rescue Errno::ENOSPC
776
+ # If we ran out of space but the file exists, it's *guaranteed* to be corrupted.
777
+ File.delete(path) if File.exist?(path)
778
+ raise
779
+ end
780
+
781
+ ##
782
+ # Open a file with given flags, and on Windows protect access with flock
783
+
784
+ def self.open_file(path, flags, &block)
785
+ File.open(path, flags) do |io|
786
+ if !java_platform? && win_platform?
787
+ begin
788
+ io.flock(File::LOCK_EX)
789
+ rescue Errno::ENOSYS, Errno::ENOTSUP
790
+ end
791
+ end
792
+ yield io
793
+ end
883
794
  rescue Errno::ENOLCK # NFS
884
795
  if Thread.main != Thread.current
885
796
  raise
886
797
  else
887
- open(path, 'wb') do |io|
888
- io.write data
798
+ File.open(path, flags) do |io|
799
+ yield io
889
800
  end
890
801
  end
891
802
  end
@@ -895,8 +806,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
895
806
 
896
807
  def self.ruby
897
808
  if @ruby.nil?
898
- @ruby = File.join(RbConfig::CONFIG['bindir'],
899
- "#{RbConfig::CONFIG['ruby_install_name']}#{RbConfig::CONFIG['EXEEXT']}")
809
+ @ruby = RbConfig.ruby
900
810
 
901
811
  @ruby = "\"#{@ruby}\"" if @ruby =~ /\s/
902
812
  end
@@ -908,13 +818,13 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
908
818
  # Returns a String containing the API compatibility version of Ruby
909
819
 
910
820
  def self.ruby_api_version
911
- @ruby_api_version ||= RbConfig::CONFIG['ruby_version'].dup
821
+ @ruby_api_version ||= RbConfig::CONFIG["ruby_version"].dup
912
822
  end
913
823
 
914
824
  def self.env_requirement(gem_name)
915
825
  @env_requirements_by_name ||= {}
916
826
  @env_requirements_by_name[gem_name] ||= begin
917
- req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || '>= 0'.freeze
827
+ req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || ">= 0".freeze
918
828
  Gem::Requirement.create(req)
919
829
  end
920
830
  end
@@ -928,7 +838,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
928
838
  fetcher = Gem::SpecFetcher.fetcher
929
839
  spec_tuples, = fetcher.spec_for_dependency dependency
930
840
 
931
- spec, = spec_tuples.first
841
+ spec, = spec_tuples.last
932
842
 
933
843
  spec
934
844
  end
@@ -937,8 +847,8 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
937
847
  # Returns the latest release version of RubyGems.
938
848
 
939
849
  def self.latest_rubygems_version
940
- latest_version_for('rubygems-update') or
941
- raise "Can't find 'rubygems-update' in any repo. Check `gem source list`."
850
+ latest_version_for("rubygems-update") ||
851
+ raise("Can't find 'rubygems-update' in any repo. Check `gem source list`.")
942
852
  end
943
853
 
944
854
  ##
@@ -946,7 +856,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
946
856
 
947
857
  def self.latest_version_for(name)
948
858
  spec = latest_spec_for name
949
- spec and spec.version
859
+ spec && spec.version
950
860
  end
951
861
 
952
862
  ##
@@ -956,9 +866,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
956
866
  return @ruby_version if defined? @ruby_version
957
867
  version = RUBY_VERSION.dup
958
868
 
959
- if defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1
960
- version << ".#{RUBY_PATCHLEVEL}"
961
- elsif defined?(RUBY_DESCRIPTION)
869
+ unless defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1
962
870
  if RUBY_ENGINE == "ruby"
963
871
  desc = RUBY_DESCRIPTION[/\Aruby #{Regexp.quote(RUBY_VERSION)}([^ ]+) /, 1]
964
872
  else
@@ -1009,17 +917,38 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1009
917
  @suffix_pattern ||= "{#{suffixes.join(',')}}"
1010
918
  end
1011
919
 
920
+ ##
921
+ # Regexp for require-able path suffixes.
922
+
923
+ def self.suffix_regexp
924
+ @suffix_regexp ||= /#{Regexp.union(suffixes)}\z/
925
+ end
926
+
927
+ ##
928
+ # Glob pattern for require-able plugin suffixes.
929
+
930
+ def self.plugin_suffix_pattern
931
+ @plugin_suffix_pattern ||= "_plugin#{suffix_pattern}"
932
+ end
933
+
934
+ ##
935
+ # Regexp for require-able plugin suffixes.
936
+
937
+ def self.plugin_suffix_regexp
938
+ @plugin_suffix_regexp ||= /_plugin#{suffix_regexp}\z/
939
+ end
940
+
1012
941
  ##
1013
942
  # Suffixes for require-able paths.
1014
943
 
1015
944
  def self.suffixes
1016
- @suffixes ||= ['',
1017
- '.rb',
1018
- *%w(DLEXT DLEXT2).map { |key|
945
+ @suffixes ||= ["",
946
+ ".rb",
947
+ *%w[DLEXT DLEXT2].map do |key|
1019
948
  val = RbConfig::CONFIG[key]
1020
- next unless val and not val.empty?
949
+ next unless val && !val.empty?
1021
950
  ".#{val}"
1022
- }
951
+ end,
1023
952
  ].compact.uniq
1024
953
  end
1025
954
 
@@ -1043,7 +972,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1043
972
  # Lazily loads DefaultUserInteraction and returns the default UI.
1044
973
 
1045
974
  def self.ui
1046
- require 'rubygems/user_interaction'
975
+ require_relative "rubygems/user_interaction"
1047
976
 
1048
977
  Gem::DefaultUserInteraction.ui
1049
978
  end
@@ -1056,35 +985,41 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1056
985
  paths.flatten!
1057
986
  paths.compact!
1058
987
  hash = { "GEM_HOME" => home, "GEM_PATH" => paths.empty? ? home : paths.join(File::PATH_SEPARATOR) }
1059
- hash.delete_if { |_, v| v.nil? }
988
+ hash.delete_if {|_, v| v.nil? }
1060
989
  self.paths = hash
1061
990
  end
1062
991
 
1063
- ##
1064
- # The home directory for the user.
1065
-
1066
- def self.user_home
1067
- @user_home ||= find_home.untaint
1068
- end
1069
-
1070
992
  ##
1071
993
  # Is this a windows platform?
1072
994
 
1073
995
  def self.win_platform?
1074
996
  if @@win_platform.nil?
1075
- ruby_platform = RbConfig::CONFIG['host_os']
1076
- @@win_platform = !!WIN_PATTERNS.find { |r| ruby_platform =~ r }
997
+ ruby_platform = RbConfig::CONFIG["host_os"]
998
+ @@win_platform = !!WIN_PATTERNS.find {|r| ruby_platform =~ r }
1077
999
  end
1078
1000
 
1079
1001
  @@win_platform
1080
1002
  end
1081
1003
 
1004
+ ##
1005
+ # Is this a java platform?
1006
+
1007
+ def self.java_platform?
1008
+ RUBY_PLATFORM == "java"
1009
+ end
1010
+
1011
+ ##
1012
+ # Is this platform Solaris?
1013
+
1014
+ def self.solaris_platform?
1015
+ RUBY_PLATFORM.include?("solaris")
1016
+ end
1017
+
1082
1018
  ##
1083
1019
  # Load +plugins+ as Ruby files
1084
1020
 
1085
1021
  def self.load_plugin_files(plugins) # :nodoc:
1086
1022
  plugins.each do |plugin|
1087
-
1088
1023
  # Skip older versions of the GemCutter plugin: Its commands are in
1089
1024
  # RubyGems proper now.
1090
1025
 
@@ -1100,15 +1035,11 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1100
1035
  end
1101
1036
 
1102
1037
  ##
1103
- # Find the 'rubygems_plugin' files in the latest installed gems and load
1104
- # them
1038
+ # Find rubygems plugin files in the standard location and load them
1105
1039
 
1106
1040
  def self.load_plugins
1107
- # Remove this env var by at least 3.0
1108
- if ENV['RUBYGEMS_LOAD_ALL_PLUGINS']
1109
- load_plugin_files find_files('rubygems_plugin', false)
1110
- else
1111
- load_plugin_files find_latest_files('rubygems_plugin', false)
1041
+ Gem.path.each do |gem_path|
1042
+ load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir(gem_path))
1112
1043
  end
1113
1044
  end
1114
1045
 
@@ -1116,19 +1047,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1116
1047
  # Find all 'rubygems_plugin' files in $LOAD_PATH and load them
1117
1048
 
1118
1049
  def self.load_env_plugins
1119
- path = "rubygems_plugin"
1120
-
1121
- files = []
1122
- glob = "#{path}#{Gem.suffix_pattern}"
1123
- $LOAD_PATH.each do |load_path|
1124
- globbed = Gem::Util.glob_files_in_dir(glob, load_path)
1125
-
1126
- globbed.each do |load_path_file|
1127
- files << load_path_file if File.file?(load_path_file.untaint)
1128
- end
1129
- end
1130
-
1131
- load_plugin_files files
1050
+ load_plugin_files find_files_from_load_path("rubygems_plugin")
1132
1051
  end
1133
1052
 
1134
1053
  ##
@@ -1154,14 +1073,14 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1154
1073
  def self.use_gemdeps(path = nil)
1155
1074
  raise_exception = path
1156
1075
 
1157
- path ||= ENV['RUBYGEMS_GEMDEPS']
1076
+ path ||= ENV["RUBYGEMS_GEMDEPS"]
1158
1077
  return unless path
1159
1078
 
1160
1079
  path = path.dup
1161
1080
 
1162
1081
  if path == "-"
1163
1082
  Gem::Util.traverse_parents Dir.pwd do |directory|
1164
- dep_file = GEM_DEP_FILES.find { |f| File.file?(f) }
1083
+ dep_file = GEM_DEP_FILES.find {|f| File.file?(f) }
1165
1084
 
1166
1085
  next unless dep_file
1167
1086
 
@@ -1170,7 +1089,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1170
1089
  end
1171
1090
  end
1172
1091
 
1173
- path.untaint
1092
+ path.tap(&Gem::UNTAINT)
1174
1093
 
1175
1094
  unless File.file? path
1176
1095
  return unless raise_exception
@@ -1178,52 +1097,83 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1178
1097
  raise ArgumentError, "Unable to find gem dependencies file at #{path}"
1179
1098
  end
1180
1099
 
1181
- if USE_BUNDLER_FOR_GEMDEPS
1182
-
1183
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
1184
- require 'rubygems/user_interaction'
1100
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
1101
+ require_relative "rubygems/user_interaction"
1102
+ require "bundler"
1103
+ begin
1185
1104
  Gem::DefaultUserInteraction.use_ui(ui) do
1186
- require "bundler"
1187
- @gemdeps = Bundler.setup
1188
- Bundler.ui = nil
1189
- @gemdeps.requested_specs.map(&:to_spec).sort_by(&:name)
1190
- end
1191
-
1192
- else
1193
-
1194
- rs = Gem::RequestSet.new
1195
- @gemdeps = rs.load_gemdeps path
1196
-
1197
- rs.resolve_current.map do |s|
1198
- s.full_spec.tap(&:activate)
1105
+ begin
1106
+ Bundler.ui.silence do
1107
+ @gemdeps = Bundler.setup
1108
+ end
1109
+ ensure
1110
+ Gem::DefaultUserInteraction.ui.close
1111
+ end
1199
1112
  end
1200
-
1201
- end
1202
- rescue => e
1203
- case e
1204
- when Gem::LoadError, Gem::UnsatisfiableDependencyError, (defined?(Bundler::GemNotFound) ? Bundler::GemNotFound : Gem::LoadError)
1113
+ rescue Bundler::BundlerError => e
1205
1114
  warn e.message
1206
- warn "You may need to `gem install -g` to install missing gems"
1115
+ warn "You may need to `bundle install` to install missing gems"
1207
1116
  warn ""
1208
- else
1209
- raise
1210
1117
  end
1211
1118
  end
1212
1119
 
1213
- class << self
1214
- ##
1215
- # TODO remove with RubyGems 4.0
1120
+ ##
1121
+ # If the SOURCE_DATE_EPOCH environment variable is set, returns it's value.
1122
+ # Otherwise, returns the time that +Gem.source_date_epoch_string+ was
1123
+ # first called in the same format as SOURCE_DATE_EPOCH.
1124
+ #
1125
+ # NOTE(@duckinator): The implementation is a tad weird because we want to:
1126
+ # 1. Make builds reproducible by default, by having this function always
1127
+ # return the same result during a given run.
1128
+ # 2. Allow changing ENV['SOURCE_DATE_EPOCH'] at runtime, since multiple
1129
+ # tests that set this variable will be run in a single process.
1130
+ #
1131
+ # If you simplify this function and a lot of tests fail, that is likely
1132
+ # due to #2 above.
1133
+ #
1134
+ # Details on SOURCE_DATE_EPOCH:
1135
+ # https://reproducible-builds.org/specs/source-date-epoch/
1136
+
1137
+ def self.source_date_epoch_string
1138
+ # The value used if $SOURCE_DATE_EPOCH is not set.
1139
+ @default_source_date_epoch ||= Time.now.to_i.to_s
1140
+
1141
+ specified_epoch = ENV["SOURCE_DATE_EPOCH"]
1142
+
1143
+ # If it's empty or just whitespace, treat it like it wasn't set at all.
1144
+ specified_epoch = nil if !specified_epoch.nil? && specified_epoch.strip.empty?
1216
1145
 
1217
- alias detect_gemdeps use_gemdeps # :nodoc:
1146
+ epoch = specified_epoch || @default_source_date_epoch
1218
1147
 
1219
- extend Gem::Deprecate
1220
- deprecate :detect_gemdeps, "Gem.use_gemdeps", 2018, 12
1148
+ epoch.strip
1149
+ end
1150
+
1151
+ ##
1152
+ # Returns the value of Gem.source_date_epoch_string, as a Time object.
1153
+ #
1154
+ # This is used throughout RubyGems for enabling reproducible builds.
1155
+
1156
+ def self.source_date_epoch
1157
+ Time.at(self.source_date_epoch_string.to_i).utc.freeze
1221
1158
  end
1222
1159
 
1223
1160
  # FIX: Almost everywhere else we use the `def self.` way of defining class
1224
1161
  # methods, and then we switch over to `class << self` here. Pick one or the
1225
1162
  # other.
1226
1163
  class << self
1164
+ ##
1165
+ # RubyGems distributors (like operating system package managers) can
1166
+ # disable RubyGems update by setting this to error message printed to
1167
+ # end-users on gem update --system instead of actual update.
1168
+
1169
+ attr_accessor :disable_system_update_message
1170
+
1171
+ ##
1172
+ # Whether RubyGems should enhance builtin `require` to automatically
1173
+ # check whether the path required is present in installed gems, and
1174
+ # automatically activate them and add them to `$LOAD_PATH`.
1175
+
1176
+ attr_accessor :discover_gems_on_require
1227
1177
 
1228
1178
  ##
1229
1179
  # Hash of loaded Gem::Specification keyed by name
@@ -1249,23 +1199,24 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1249
1199
  #
1250
1200
 
1251
1201
  def register_default_spec(spec)
1252
- new_format = Gem.default_gems_use_full_paths? || spec.require_paths.any? {|path| spec.files.any? {|f| f.start_with? path } }
1202
+ extended_require_paths = spec.require_paths.map {|f| f + "/" }
1203
+ new_format = extended_require_paths.any? {|path| spec.files.any? {|f| f.start_with? path } }
1253
1204
 
1254
1205
  if new_format
1255
- prefix_group = spec.require_paths.map {|f| f + "/"}.join("|")
1206
+ prefix_group = extended_require_paths.join("|")
1256
1207
  prefix_pattern = /^(#{prefix_group})/
1257
1208
  end
1258
1209
 
1259
- suffix_pattern = /#{Regexp.union(Gem.suffixes)}\z/
1260
-
1261
1210
  spec.files.each do |file|
1262
1211
  if new_format
1263
1212
  file = file.sub(prefix_pattern, "")
1264
1213
  next unless $~
1265
1214
  end
1266
1215
 
1216
+ spec.activate if already_loaded?(file)
1217
+
1267
1218
  @path_to_default_spec_map[file] = spec
1268
- @path_to_default_spec_map[file.sub(suffix_pattern, "")] = spec
1219
+ @path_to_default_spec_map[file.sub(suffix_regexp, "")] = spec
1269
1220
  end
1270
1221
  end
1271
1222
 
@@ -1273,17 +1224,8 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1273
1224
  # Find a Gem::Specification of default gem from +path+
1274
1225
 
1275
1226
  def find_unresolved_default_spec(path)
1276
- @path_to_default_spec_map[path]
1277
- end
1278
-
1279
- ##
1280
- # Remove needless Gem::Specification of default gem from
1281
- # unresolved default gem list
1282
-
1283
- def remove_unresolved_default_spec(spec)
1284
- spec.files.each do |file|
1285
- @path_to_default_spec_map.delete(file)
1286
- end
1227
+ default_spec = @path_to_default_spec_map[path]
1228
+ return default_spec if default_spec && loaded_specs[default_spec.name] != default_spec
1287
1229
  end
1288
1230
 
1289
1231
  ##
@@ -1337,6 +1279,23 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1337
1279
  # work
1338
1280
 
1339
1281
  attr_reader :pre_uninstall_hooks
1282
+
1283
+ private
1284
+
1285
+ def already_loaded?(file)
1286
+ $LOADED_FEATURES.any? do |feature_path|
1287
+ feature_path.end_with?(file) && default_gem_load_paths.any? {|load_path_entry| feature_path == "#{load_path_entry}/#{file}" }
1288
+ end
1289
+ end
1290
+
1291
+ def default_gem_load_paths
1292
+ @default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1].map do |lp|
1293
+ expanded = File.expand_path(lp)
1294
+ next expanded unless File.exist?(expanded)
1295
+
1296
+ File.realpath(expanded)
1297
+ end
1298
+ end
1340
1299
  end
1341
1300
 
1342
1301
  ##
@@ -1344,54 +1303,68 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1344
1303
 
1345
1304
  MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/".freeze
1346
1305
 
1347
- autoload :BundlerVersionFinder, 'rubygems/bundler_version_finder'
1348
- autoload :ConfigFile, 'rubygems/config_file'
1349
- autoload :Dependency, 'rubygems/dependency'
1350
- autoload :DependencyList, 'rubygems/dependency_list'
1351
- autoload :Installer, 'rubygems/installer'
1352
- autoload :Licenses, 'rubygems/util/licenses'
1353
- autoload :PathSupport, 'rubygems/path_support'
1354
- autoload :Platform, 'rubygems/platform'
1355
- autoload :RequestSet, 'rubygems/request_set'
1356
- autoload :Requirement, 'rubygems/requirement'
1357
- autoload :Resolver, 'rubygems/resolver'
1358
- autoload :Source, 'rubygems/source'
1359
- autoload :SourceList, 'rubygems/source_list'
1360
- autoload :SpecFetcher, 'rubygems/spec_fetcher'
1361
- autoload :Specification, 'rubygems/specification'
1362
- autoload :Util, 'rubygems/util'
1363
- autoload :Version, 'rubygems/version'
1364
-
1365
- require "rubygems/specification"
1306
+ autoload :ConfigFile, File.expand_path("rubygems/config_file", __dir__)
1307
+ autoload :Dependency, File.expand_path("rubygems/dependency", __dir__)
1308
+ autoload :DependencyList, File.expand_path("rubygems/dependency_list", __dir__)
1309
+ autoload :Installer, File.expand_path("rubygems/installer", __dir__)
1310
+ autoload :Licenses, File.expand_path("rubygems/util/licenses", __dir__)
1311
+ autoload :NameTuple, File.expand_path("rubygems/name_tuple", __dir__)
1312
+ autoload :PathSupport, File.expand_path("rubygems/path_support", __dir__)
1313
+ autoload :RequestSet, File.expand_path("rubygems/request_set", __dir__)
1314
+ autoload :Requirement, File.expand_path("rubygems/requirement", __dir__)
1315
+ autoload :Resolver, File.expand_path("rubygems/resolver", __dir__)
1316
+ autoload :Source, File.expand_path("rubygems/source", __dir__)
1317
+ autoload :SourceList, File.expand_path("rubygems/source_list", __dir__)
1318
+ autoload :SpecFetcher, File.expand_path("rubygems/spec_fetcher", __dir__)
1319
+ autoload :SpecificationPolicy, File.expand_path("rubygems/specification_policy", __dir__)
1320
+ autoload :Util, File.expand_path("rubygems/util", __dir__)
1321
+ autoload :Version, File.expand_path("rubygems/version", __dir__)
1366
1322
  end
1367
1323
 
1368
- require 'rubygems/exceptions'
1324
+ require_relative "rubygems/exceptions"
1325
+ require_relative "rubygems/specification"
1369
1326
 
1370
1327
  # REFACTOR: This should be pulled out into some kind of hacks file.
1371
1328
  begin
1372
1329
  ##
1373
1330
  # Defaults the operating system (or packager) wants to provide for RubyGems.
1374
1331
 
1375
- require 'rubygems/defaults/operating_system'
1332
+ require "rubygems/defaults/operating_system"
1376
1333
  rescue LoadError
1334
+ # Ignored
1335
+ rescue StandardError => e
1336
+ path = e.backtrace_locations.reverse.find {|l| l.path.end_with?("rubygems/defaults/operating_system.rb") }.path
1337
+ msg = "#{e.message}\n" \
1338
+ "Loading the #{path} file caused an error. " \
1339
+ "This file is owned by your OS, not by rubygems upstream. " \
1340
+ "Please find out which OS package this file belongs to and follow the guidelines from your OS to report " \
1341
+ "the problem and ask for help."
1342
+ raise e.class, msg
1377
1343
  end
1378
1344
 
1379
- if defined?(RUBY_ENGINE)
1380
- begin
1381
- ##
1382
- # Defaults the Ruby implementation wants to provide for RubyGems
1345
+ begin
1346
+ ##
1347
+ # Defaults the Ruby implementation wants to provide for RubyGems
1383
1348
 
1384
- require "rubygems/defaults/#{RUBY_ENGINE}"
1385
- rescue LoadError
1386
- end
1349
+ require "rubygems/defaults/#{RUBY_ENGINE}"
1350
+ rescue LoadError
1387
1351
  end
1388
1352
 
1389
1353
  ##
1390
1354
  # Loads the default specs.
1391
1355
  Gem::Specification.load_defaults
1392
1356
 
1393
- require 'rubygems/core_ext/kernel_gem'
1394
- require 'rubygems/core_ext/kernel_require'
1395
- require 'rubygems/core_ext/kernel_warn'
1357
+ require_relative "rubygems/core_ext/kernel_gem"
1358
+
1359
+ path = File.join(__dir__, "rubygems/core_ext/kernel_require.rb")
1360
+ # When https://bugs.ruby-lang.org/issues/17259 is available, there is no need to override Kernel#warn
1361
+ if RUBY_ENGINE == "truffleruby" ||
1362
+ (RUBY_ENGINE == "ruby" && RUBY_VERSION >= "3.0")
1363
+ file = "<internal:#{path}>"
1364
+ else
1365
+ require_relative "rubygems/core_ext/kernel_warn"
1366
+ file = path
1367
+ end
1368
+ eval File.read(path), nil, file
1396
1369
 
1397
- Gem.use_gemdeps
1370
+ require ENV["BUNDLER_SETUP"] if ENV["BUNDLER_SETUP"] && !defined?(Bundler)