rubygems-update 2.6.0 → 3.5.4

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