rubygems-update 2.6.0 → 3.4.22

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 (804) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +5802 -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 +441 -42
  7. data/POLICIES.md +135 -0
  8. data/README.md +114 -0
  9. data/UPGRADING.md +15 -0
  10. data/bundler/CHANGELOG.md +4666 -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 +44 -0
  15. data/bundler/exe/bundle +38 -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/cli/add.rb +47 -0
  21. data/bundler/lib/bundler/cli/binstubs.rb +57 -0
  22. data/bundler/lib/bundler/cli/cache.rb +43 -0
  23. data/bundler/lib/bundler/cli/check.rb +40 -0
  24. data/bundler/lib/bundler/cli/clean.rb +25 -0
  25. data/bundler/lib/bundler/cli/common.rb +130 -0
  26. data/bundler/lib/bundler/cli/config.rb +203 -0
  27. data/bundler/lib/bundler/cli/console.rb +43 -0
  28. data/bundler/lib/bundler/cli/doctor.rb +157 -0
  29. data/bundler/lib/bundler/cli/exec.rb +88 -0
  30. data/bundler/lib/bundler/cli/fund.rb +36 -0
  31. data/bundler/lib/bundler/cli/gem.rb +466 -0
  32. data/bundler/lib/bundler/cli/info.rb +94 -0
  33. data/bundler/lib/bundler/cli/init.rb +51 -0
  34. data/bundler/lib/bundler/cli/inject.rb +60 -0
  35. data/bundler/lib/bundler/cli/install.rb +189 -0
  36. data/bundler/lib/bundler/cli/issue.rb +41 -0
  37. data/bundler/lib/bundler/cli/list.rb +66 -0
  38. data/bundler/lib/bundler/cli/lock.rb +73 -0
  39. data/bundler/lib/bundler/cli/open.rb +29 -0
  40. data/bundler/lib/bundler/cli/outdated.rb +297 -0
  41. data/bundler/lib/bundler/cli/platform.rb +48 -0
  42. data/bundler/lib/bundler/cli/plugin.rb +41 -0
  43. data/bundler/lib/bundler/cli/pristine.rb +52 -0
  44. data/bundler/lib/bundler/cli/remove.rb +17 -0
  45. data/bundler/lib/bundler/cli/show.rb +75 -0
  46. data/bundler/lib/bundler/cli/update.rb +123 -0
  47. data/bundler/lib/bundler/cli/viz.rb +31 -0
  48. data/bundler/lib/bundler/cli.rb +894 -0
  49. data/bundler/lib/bundler/compact_index_client/cache.rb +101 -0
  50. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  51. data/bundler/lib/bundler/compact_index_client/updater.rb +117 -0
  52. data/bundler/lib/bundler/compact_index_client.rb +119 -0
  53. data/bundler/lib/bundler/constants.rb +7 -0
  54. data/bundler/lib/bundler/current_ruby.rb +108 -0
  55. data/bundler/lib/bundler/definition.rb +978 -0
  56. data/bundler/lib/bundler/dependency.rb +97 -0
  57. data/bundler/lib/bundler/deployment.rb +69 -0
  58. data/bundler/lib/bundler/deprecate.rb +44 -0
  59. data/bundler/lib/bundler/digest.rb +71 -0
  60. data/bundler/lib/bundler/dsl.rb +583 -0
  61. data/bundler/lib/bundler/endpoint_specification.rb +143 -0
  62. data/bundler/lib/bundler/env.rb +150 -0
  63. data/bundler/lib/bundler/environment_preserver.rb +86 -0
  64. data/bundler/lib/bundler/errors.rb +190 -0
  65. data/bundler/lib/bundler/feature_flag.rb +53 -0
  66. data/bundler/lib/bundler/fetcher/base.rb +50 -0
  67. data/bundler/lib/bundler/fetcher/compact_index.rb +129 -0
  68. data/bundler/lib/bundler/fetcher/dependency.rb +78 -0
  69. data/bundler/lib/bundler/fetcher/downloader.rb +89 -0
  70. data/bundler/lib/bundler/fetcher/index.rb +25 -0
  71. data/bundler/lib/bundler/fetcher.rb +321 -0
  72. data/bundler/lib/bundler/force_platform.rb +18 -0
  73. data/bundler/lib/bundler/friendly_errors.rb +126 -0
  74. data/bundler/lib/bundler/gem_helper.rb +237 -0
  75. data/bundler/lib/bundler/gem_helpers.rb +124 -0
  76. data/bundler/lib/bundler/gem_tasks.rb +7 -0
  77. data/bundler/lib/bundler/gem_version_promoter.rb +145 -0
  78. data/bundler/lib/bundler/graph.rb +152 -0
  79. data/bundler/lib/bundler/index.rb +206 -0
  80. data/bundler/lib/bundler/injector.rb +287 -0
  81. data/bundler/lib/bundler/inline.rb +73 -0
  82. data/bundler/lib/bundler/installer/gem_installer.rb +84 -0
  83. data/bundler/lib/bundler/installer/parallel_installer.rb +194 -0
  84. data/bundler/lib/bundler/installer/standalone.rb +117 -0
  85. data/bundler/lib/bundler/installer.rb +267 -0
  86. data/bundler/lib/bundler/lazy_specification.rb +163 -0
  87. data/bundler/lib/bundler/lockfile_generator.rb +95 -0
  88. data/bundler/lib/bundler/lockfile_parser.rb +218 -0
  89. data/bundler/lib/bundler/man/.document +1 -0
  90. data/bundler/lib/bundler/man/bundle-add.1 +82 -0
  91. data/bundler/lib/bundler/man/bundle-add.1.ronn +58 -0
  92. data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
  93. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
  94. data/bundler/lib/bundler/man/bundle-cache.1 +61 -0
  95. data/bundler/lib/bundler/man/bundle-cache.1.ronn +79 -0
  96. data/bundler/lib/bundler/man/bundle-check.1 +31 -0
  97. data/bundler/lib/bundler/man/bundle-check.1.ronn +26 -0
  98. data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
  99. data/bundler/lib/bundler/man/bundle-clean.1.ronn +18 -0
  100. data/bundler/lib/bundler/man/bundle-config.1 +512 -0
  101. data/bundler/lib/bundler/man/bundle-config.1.ronn +405 -0
  102. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  103. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  104. data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
  105. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +33 -0
  106. data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
  107. data/bundler/lib/bundler/man/bundle-exec.1.ronn +151 -0
  108. data/bundler/lib/bundler/man/bundle-gem.1 +105 -0
  109. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  110. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  111. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  112. data/bundler/lib/bundler/man/bundle-info.1 +20 -0
  113. data/bundler/lib/bundler/man/bundle-info.1.ronn +17 -0
  114. data/bundler/lib/bundler/man/bundle-init.1 +29 -0
  115. data/bundler/lib/bundler/man/bundle-init.1.ronn +31 -0
  116. data/bundler/lib/bundler/man/bundle-inject.1 +36 -0
  117. data/bundler/lib/bundler/man/bundle-inject.1.ronn +24 -0
  118. data/bundler/lib/bundler/man/bundle-install.1 +313 -0
  119. data/bundler/lib/bundler/man/bundle-install.1.ronn +382 -0
  120. data/bundler/lib/bundler/man/bundle-list.1 +50 -0
  121. data/bundler/lib/bundler/man/bundle-list.1.ronn +33 -0
  122. data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
  123. data/bundler/lib/bundler/man/bundle-lock.1.ronn +94 -0
  124. data/bundler/lib/bundler/man/bundle-open.1 +52 -0
  125. data/bundler/lib/bundler/man/bundle-open.1.ronn +27 -0
  126. data/bundler/lib/bundler/man/bundle-outdated.1 +152 -0
  127. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +105 -0
  128. data/bundler/lib/bundler/man/bundle-platform.1 +71 -0
  129. data/bundler/lib/bundler/man/bundle-platform.1.ronn +49 -0
  130. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  131. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  132. data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
  133. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  134. data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
  135. data/bundler/lib/bundler/man/bundle-remove.1.ronn +23 -0
  136. data/bundler/lib/bundler/man/bundle-show.1 +23 -0
  137. data/bundler/lib/bundler/man/bundle-show.1.ronn +21 -0
  138. data/bundler/lib/bundler/man/bundle-update.1 +394 -0
  139. data/bundler/lib/bundler/man/bundle-update.1.ronn +351 -0
  140. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  141. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  142. data/bundler/lib/bundler/man/bundle-viz.1 +42 -0
  143. data/bundler/lib/bundler/man/bundle-viz.1.ronn +32 -0
  144. data/bundler/lib/bundler/man/bundle.1 +141 -0
  145. data/bundler/lib/bundler/man/bundle.1.ronn +116 -0
  146. data/bundler/lib/bundler/man/gemfile.5 +747 -0
  147. data/bundler/lib/bundler/man/gemfile.5.ronn +548 -0
  148. data/bundler/lib/bundler/man/index.txt +29 -0
  149. data/bundler/lib/bundler/match_metadata.rb +13 -0
  150. data/bundler/lib/bundler/match_platform.rb +23 -0
  151. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  152. data/bundler/lib/bundler/mirror.rb +221 -0
  153. data/bundler/lib/bundler/plugin/api/source.rb +320 -0
  154. data/bundler/lib/bundler/plugin/api.rb +81 -0
  155. data/bundler/lib/bundler/plugin/dsl.rb +53 -0
  156. data/bundler/lib/bundler/plugin/events.rb +61 -0
  157. data/bundler/lib/bundler/plugin/index.rb +193 -0
  158. data/bundler/lib/bundler/plugin/installer/git.rb +34 -0
  159. data/bundler/lib/bundler/plugin/installer/rubygems.rb +19 -0
  160. data/bundler/lib/bundler/plugin/installer.rb +112 -0
  161. data/bundler/lib/bundler/plugin/source_list.rb +31 -0
  162. data/bundler/lib/bundler/plugin.rb +359 -0
  163. data/bundler/lib/bundler/process_lock.rb +24 -0
  164. data/bundler/lib/bundler/remote_specification.rb +117 -0
  165. data/bundler/lib/bundler/resolver/base.rb +107 -0
  166. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  167. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  168. data/bundler/lib/bundler/resolver/package.rb +77 -0
  169. data/bundler/lib/bundler/resolver/root.rb +25 -0
  170. data/bundler/lib/bundler/resolver/spec_group.rb +82 -0
  171. data/bundler/lib/bundler/resolver.rb +462 -0
  172. data/bundler/lib/bundler/retry.rb +66 -0
  173. data/bundler/lib/bundler/ruby_dsl.rb +45 -0
  174. data/bundler/lib/bundler/ruby_version.rb +131 -0
  175. data/bundler/lib/bundler/rubygems_ext.rb +354 -0
  176. data/bundler/lib/bundler/rubygems_gem_installer.rb +187 -0
  177. data/bundler/lib/bundler/rubygems_integration.rb +562 -0
  178. data/bundler/lib/bundler/runtime.rb +307 -0
  179. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  180. data/bundler/lib/bundler/self_manager.rb +170 -0
  181. data/bundler/lib/bundler/settings/validator.rb +102 -0
  182. data/bundler/lib/bundler/settings.rb +568 -0
  183. data/bundler/lib/bundler/setup.rb +30 -0
  184. data/bundler/lib/bundler/shared_helpers.rb +358 -0
  185. data/bundler/lib/bundler/similarity_detector.rb +63 -0
  186. data/bundler/lib/bundler/source/gemspec.rb +18 -0
  187. data/bundler/lib/bundler/source/git/git_proxy.rb +455 -0
  188. data/bundler/lib/bundler/source/git.rb +379 -0
  189. data/bundler/lib/bundler/source/metadata.rb +62 -0
  190. data/bundler/lib/bundler/source/path/installer.rb +53 -0
  191. data/bundler/lib/bundler/source/path.rb +260 -0
  192. data/bundler/lib/bundler/source/rubygems/remote.rb +68 -0
  193. data/bundler/lib/bundler/source/rubygems.rb +509 -0
  194. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  195. data/bundler/lib/bundler/source.rb +114 -0
  196. data/bundler/lib/bundler/source_list.rb +227 -0
  197. data/bundler/lib/bundler/source_map.rb +71 -0
  198. data/bundler/lib/bundler/spec_set.rb +219 -0
  199. data/bundler/lib/bundler/stub_specification.rb +118 -0
  200. data/bundler/lib/bundler/templates/.document +1 -0
  201. data/bundler/lib/bundler/templates/Executable +27 -0
  202. data/bundler/lib/bundler/templates/Executable.bundler +109 -0
  203. data/bundler/lib/bundler/templates/Executable.standalone +14 -0
  204. data/bundler/lib/bundler/templates/Gemfile +5 -0
  205. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  206. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +84 -0
  207. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  208. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +26 -0
  209. data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  210. data/bundler/lib/bundler/templates/newgem/README.md.tt +45 -0
  211. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +71 -0
  212. data/bundler/lib/bundler/templates/newgem/bin/console.tt +11 -0
  213. data/bundler/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  214. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  215. data/bundler/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  216. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  217. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  218. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  219. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  220. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  221. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  222. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  223. data/bundler/lib/bundler/templates/newgem/gitignore.tt +23 -0
  224. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  225. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
  226. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
  227. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +51 -0
  228. data/bundler/lib/bundler/templates/newgem/rspec.tt +3 -0
  229. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  230. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  231. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
  232. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
  233. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  234. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  235. data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
  236. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  237. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  238. data/bundler/lib/bundler/ui/rg_proxy.rb +19 -0
  239. data/bundler/lib/bundler/ui/shell.rb +165 -0
  240. data/bundler/lib/bundler/ui/silent.rb +85 -0
  241. data/bundler/lib/bundler/ui.rb +9 -0
  242. data/bundler/lib/bundler/uri_credentials_filter.rb +43 -0
  243. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  244. data/bundler/lib/bundler/vendor/.document +1 -0
  245. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  246. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  247. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  248. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  249. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  250. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  251. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2706 -0
  252. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  253. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  254. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  255. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  256. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -0
  257. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  258. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  259. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  260. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  261. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  262. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  263. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  264. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  265. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  266. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  267. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  268. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  269. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  270. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  271. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  272. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  273. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  274. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  284. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  285. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  286. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
  287. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  288. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  289. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  290. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  291. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  292. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
  293. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  294. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  295. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
  296. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  297. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  298. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  299. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
  300. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +115 -0
  301. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  302. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +84 -0
  303. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  304. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  305. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  306. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  307. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  308. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  309. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  310. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
  311. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  312. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  313. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  314. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  315. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  316. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  317. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  318. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  319. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  320. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  321. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  322. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  323. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  324. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  325. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  326. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  327. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  328. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  329. data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
  330. data/bundler/lib/bundler/vendored_persistent.rb +15 -0
  331. data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
  332. data/bundler/lib/bundler/vendored_thor.rb +8 -0
  333. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  334. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  335. data/bundler/lib/bundler/version.rb +13 -0
  336. data/bundler/lib/bundler/vlad.rb +17 -0
  337. data/bundler/lib/bundler/worker.rb +117 -0
  338. data/bundler/lib/bundler/yaml_serializer.rb +93 -0
  339. data/bundler/lib/bundler.rb +654 -0
  340. data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
  341. data/exe/update_rubygems +38 -0
  342. data/hide_lib_for_update/note.txt +0 -4
  343. data/lib/rubygems/available_set.rb +9 -9
  344. data/lib/rubygems/basic_specification.rb +56 -37
  345. data/lib/rubygems/bundler_version_finder.rb +77 -0
  346. data/lib/rubygems/command.rb +142 -67
  347. data/lib/rubygems/command_manager.rb +61 -25
  348. data/lib/rubygems/commands/build_command.rb +88 -17
  349. data/lib/rubygems/commands/cert_command.rb +131 -82
  350. data/lib/rubygems/commands/check_command.rb +27 -24
  351. data/lib/rubygems/commands/cleanup_command.rb +56 -37
  352. data/lib/rubygems/commands/contents_command.rb +33 -35
  353. data/lib/rubygems/commands/dependency_command.rb +52 -63
  354. data/lib/rubygems/commands/environment_command.rb +31 -13
  355. data/lib/rubygems/commands/exec_command.rb +249 -0
  356. data/lib/rubygems/commands/fetch_command.rb +36 -19
  357. data/lib/rubygems/commands/generate_index_command.rb +21 -20
  358. data/lib/rubygems/commands/help_command.rb +21 -21
  359. data/lib/rubygems/commands/info_command.rb +38 -0
  360. data/lib/rubygems/commands/install_command.rb +65 -133
  361. data/lib/rubygems/commands/list_command.rb +10 -9
  362. data/lib/rubygems/commands/lock_command.rb +11 -13
  363. data/lib/rubygems/commands/mirror_command.rb +4 -4
  364. data/lib/rubygems/commands/open_command.rb +28 -26
  365. data/lib/rubygems/commands/outdated_command.rb +6 -6
  366. data/lib/rubygems/commands/owner_command.rb +50 -26
  367. data/lib/rubygems/commands/pristine_command.rb +96 -66
  368. data/lib/rubygems/commands/push_command.rb +52 -45
  369. data/lib/rubygems/commands/query_command.rb +22 -328
  370. data/lib/rubygems/commands/rdoc_command.rb +31 -31
  371. data/lib/rubygems/commands/search_command.rb +9 -9
  372. data/lib/rubygems/commands/server_command.rb +15 -76
  373. data/lib/rubygems/commands/setup_command.rb +375 -188
  374. data/lib/rubygems/commands/signin_command.rb +34 -0
  375. data/lib/rubygems/commands/signout_command.rb +32 -0
  376. data/lib/rubygems/commands/sources_command.rb +51 -35
  377. data/lib/rubygems/commands/specification_command.rb +39 -29
  378. data/lib/rubygems/commands/stale_command.rb +5 -4
  379. data/lib/rubygems/commands/uninstall_command.rb +94 -59
  380. data/lib/rubygems/commands/unpack_command.rb +43 -52
  381. data/lib/rubygems/commands/update_command.rb +154 -96
  382. data/lib/rubygems/commands/which_command.rb +13 -16
  383. data/lib/rubygems/commands/yank_command.rb +27 -31
  384. data/lib/rubygems/compatibility.rb +8 -26
  385. data/lib/rubygems/config_file.rb +214 -119
  386. data/lib/rubygems/core_ext/kernel_gem.rb +10 -14
  387. data/lib/rubygems/core_ext/kernel_require.rb +119 -88
  388. data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
  389. data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
  390. data/lib/rubygems/defaults.rb +174 -56
  391. data/lib/rubygems/dependency.rb +66 -51
  392. data/lib/rubygems/dependency_installer.rb +70 -225
  393. data/lib/rubygems/dependency_list.rb +32 -33
  394. data/lib/rubygems/deprecate.rb +112 -17
  395. data/lib/rubygems/doctor.rb +30 -30
  396. data/lib/rubygems/errors.rb +51 -9
  397. data/lib/rubygems/exceptions.rb +64 -35
  398. data/lib/rubygems/ext/build_error.rb +3 -1
  399. data/lib/rubygems/ext/builder.rb +96 -75
  400. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  401. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  402. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  403. data/lib/rubygems/ext/configure_builder.rb +6 -9
  404. data/lib/rubygems/ext/ext_conf_builder.rb +41 -60
  405. data/lib/rubygems/ext/rake_builder.rb +18 -21
  406. data/lib/rubygems/ext.rb +8 -7
  407. data/lib/rubygems/gem_runner.rb +22 -24
  408. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  409. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  410. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  411. data/lib/rubygems/gemcutter_utilities.rb +244 -40
  412. data/lib/rubygems/indexer.rb +49 -55
  413. data/lib/rubygems/install_default_message.rb +3 -3
  414. data/lib/rubygems/install_message.rb +3 -3
  415. data/lib/rubygems/install_update_options.rb +103 -96
  416. data/lib/rubygems/installer.rb +370 -214
  417. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  418. data/lib/rubygems/local_remote_options.rb +27 -27
  419. data/lib/rubygems/mock_gem_ui.rb +6 -9
  420. data/lib/rubygems/name_tuple.rb +16 -19
  421. data/lib/rubygems/openssl.rb +7 -0
  422. data/lib/rubygems/optparse/.document +1 -0
  423. data/lib/rubygems/optparse/COPYING +56 -0
  424. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  425. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  426. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  427. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  428. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  429. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  430. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  431. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  432. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  433. data/lib/rubygems/optparse.rb +3 -0
  434. data/lib/rubygems/package/digest_io.rb +5 -7
  435. data/lib/rubygems/package/file_source.rb +6 -8
  436. data/lib/rubygems/package/io_source.rb +6 -4
  437. data/lib/rubygems/package/old.rb +18 -27
  438. data/lib/rubygems/package/source.rb +1 -1
  439. data/lib/rubygems/package/tar_header.rb +86 -71
  440. data/lib/rubygems/package/tar_reader/entry.rb +113 -20
  441. data/lib/rubygems/package/tar_reader.rb +13 -37
  442. data/lib/rubygems/package/tar_writer.rb +28 -44
  443. data/lib/rubygems/package.rb +234 -135
  444. data/lib/rubygems/package_task.rb +6 -12
  445. data/lib/rubygems/path_support.rb +18 -12
  446. data/lib/rubygems/platform.rb +123 -77
  447. data/lib/rubygems/psych_tree.rb +3 -2
  448. data/lib/rubygems/query_utils.rb +351 -0
  449. data/lib/rubygems/rdoc.rb +4 -326
  450. data/lib/rubygems/remote_fetcher.rb +89 -171
  451. data/lib/rubygems/request/connection_pools.rb +30 -23
  452. data/lib/rubygems/request/http_pool.rb +6 -7
  453. data/lib/rubygems/request/https_pool.rb +2 -3
  454. data/lib/rubygems/request.rb +88 -41
  455. data/lib/rubygems/request_set/gem_dependency_api.rb +171 -176
  456. data/lib/rubygems/request_set/lockfile/parser.rb +39 -49
  457. data/lib/rubygems/request_set/lockfile/tokenizer.rb +15 -13
  458. data/lib/rubygems/request_set/lockfile.rb +34 -32
  459. data/lib/rubygems/request_set.rb +115 -71
  460. data/lib/rubygems/requirement.rb +72 -63
  461. data/lib/rubygems/resolver/activation_request.rb +35 -60
  462. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  463. data/lib/rubygems/resolver/api_set.rb +40 -32
  464. data/lib/rubygems/resolver/api_specification.rb +37 -18
  465. data/lib/rubygems/resolver/best_set.rb +15 -17
  466. data/lib/rubygems/resolver/composed_set.rb +9 -11
  467. data/lib/rubygems/resolver/conflict.rb +18 -24
  468. data/lib/rubygems/resolver/current_set.rb +2 -4
  469. data/lib/rubygems/resolver/dependency_request.rb +8 -9
  470. data/lib/rubygems/resolver/git_set.rb +8 -10
  471. data/lib/rubygems/resolver/git_specification.rb +11 -13
  472. data/lib/rubygems/resolver/index_set.rb +10 -12
  473. data/lib/rubygems/resolver/index_specification.rb +42 -11
  474. data/lib/rubygems/resolver/installed_specification.rb +9 -11
  475. data/lib/rubygems/resolver/installer_set.rb +93 -46
  476. data/lib/rubygems/resolver/local_specification.rb +5 -7
  477. data/lib/rubygems/resolver/lock_set.rb +13 -15
  478. data/lib/rubygems/resolver/lock_specification.rb +13 -15
  479. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  480. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  481. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
  482. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  483. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  484. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  485. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  486. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  487. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  488. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  489. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  490. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
  491. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
  492. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
  493. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  494. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  495. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  496. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
  497. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  498. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
  499. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  500. data/lib/rubygems/resolver/molinillo.rb +2 -1
  501. data/lib/rubygems/resolver/requirement_list.rb +2 -2
  502. data/lib/rubygems/resolver/set.rb +3 -5
  503. data/lib/rubygems/resolver/source_set.rb +6 -7
  504. data/lib/rubygems/resolver/spec_specification.rb +16 -4
  505. data/lib/rubygems/resolver/specification.rb +25 -10
  506. data/lib/rubygems/resolver/stats.rb +1 -0
  507. data/lib/rubygems/resolver/vendor_set.rb +6 -8
  508. data/lib/rubygems/resolver/vendor_specification.rb +6 -8
  509. data/lib/rubygems/resolver.rb +120 -64
  510. data/lib/rubygems/s3_uri_signer.rb +177 -0
  511. data/lib/rubygems/safe_yaml.rb +59 -0
  512. data/lib/rubygems/security/policies.rb +49 -49
  513. data/lib/rubygems/security/policy.rb +44 -47
  514. data/lib/rubygems/security/signer.rb +86 -29
  515. data/lib/rubygems/security/trust_dir.rb +21 -23
  516. data/lib/rubygems/security.rb +111 -78
  517. data/lib/rubygems/security_option.rb +43 -0
  518. data/lib/rubygems/shellwords.rb +3 -0
  519. data/lib/rubygems/source/git.rb +40 -40
  520. data/lib/rubygems/source/installed.rb +5 -7
  521. data/lib/rubygems/source/local.rb +30 -30
  522. data/lib/rubygems/source/lock.rb +9 -7
  523. data/lib/rubygems/source/specific_file.rb +7 -8
  524. data/lib/rubygems/source/vendor.rb +3 -5
  525. data/lib/rubygems/source.rb +73 -63
  526. data/lib/rubygems/source_list.rb +14 -18
  527. data/lib/rubygems/spec_fetcher.rb +66 -78
  528. data/lib/rubygems/specification.rb +823 -1092
  529. data/lib/rubygems/specification_policy.rb +508 -0
  530. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
  531. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  532. data/lib/rubygems/stub_specification.rb +52 -53
  533. data/lib/rubygems/text.rb +40 -27
  534. data/lib/rubygems/tsort/.document +1 -0
  535. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  536. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  537. data/lib/rubygems/tsort.rb +3 -0
  538. data/lib/rubygems/uninstaller.rb +149 -84
  539. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  540. data/lib/rubygems/update_suggestion.rb +69 -0
  541. data/lib/rubygems/uri.rb +126 -0
  542. data/lib/rubygems/uri_formatter.rb +3 -6
  543. data/lib/rubygems/user_interaction.rb +95 -143
  544. data/lib/rubygems/util/licenses.rb +679 -314
  545. data/lib/rubygems/util/list.rb +2 -1
  546. data/lib/rubygems/util.rb +58 -73
  547. data/lib/rubygems/validator.rb +23 -47
  548. data/lib/rubygems/version.rb +92 -48
  549. data/lib/rubygems/version_option.rb +20 -9
  550. data/lib/rubygems/yaml_serializer.rb +93 -0
  551. data/lib/rubygems.rb +434 -346
  552. data/rubygems-update.gemspec +38 -0
  553. data/setup.rb +13 -27
  554. data/test/rubygems/alternate_cert.pem +15 -14
  555. data/test/rubygems/alternate_cert_32.pem +16 -15
  556. data/test/rubygems/alternate_key.pem +25 -25
  557. data/test/rubygems/bad_rake.rb +1 -0
  558. data/test/rubygems/bundler_test_gem.rb +424 -0
  559. data/test/rubygems/ca_cert.pem +74 -65
  560. data/test/rubygems/child_cert.pem +16 -15
  561. data/test/rubygems/child_cert_32.pem +16 -15
  562. data/test/rubygems/child_key.pem +25 -25
  563. data/test/rubygems/client.pem +103 -45
  564. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  565. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  566. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  567. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  568. data/test/rubygems/encrypted_private_key.pem +26 -26
  569. data/test/rubygems/expired_cert.pem +15 -14
  570. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  571. data/test/rubygems/future_cert.pem +15 -14
  572. data/test/rubygems/future_cert_32.pem +15 -14
  573. data/test/rubygems/good_rake.rb +1 -0
  574. data/test/rubygems/grandchild_cert.pem +16 -15
  575. data/test/rubygems/grandchild_cert_32.pem +16 -15
  576. data/test/rubygems/grandchild_key.pem +25 -25
  577. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +643 -490
  578. data/{lib → test}/rubygems/installer_test_case.rb +118 -64
  579. data/test/rubygems/invalid_issuer_cert.pem +17 -15
  580. data/test/rubygems/invalid_issuer_cert_32.pem +17 -15
  581. data/test/rubygems/invalid_key.pem +25 -25
  582. data/test/rubygems/invalid_signer_cert.pem +16 -15
  583. data/test/rubygems/invalid_signer_cert_32.pem +16 -15
  584. data/test/rubygems/invalidchild_cert.pem +16 -15
  585. data/test/rubygems/invalidchild_cert_32.pem +16 -15
  586. data/test/rubygems/invalidchild_key.pem +25 -25
  587. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  588. data/{lib → test}/rubygems/package/tar_test_case.rb +54 -26
  589. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  590. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  591. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  592. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  593. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  594. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  595. data/test/rubygems/private3072_key.pem +40 -0
  596. data/test/rubygems/private_ec_key.pem +9 -0
  597. data/test/rubygems/private_key.pem +25 -25
  598. data/test/rubygems/public3072_cert.pem +25 -0
  599. data/test/rubygems/public_cert.pem +17 -15
  600. data/test/rubygems/public_cert_32.pem +16 -15
  601. data/test/rubygems/public_key.pem +7 -7
  602. data/test/rubygems/rubygems/commands/crash_command.rb +1 -2
  603. data/test/rubygems/rubygems_plugin.rb +7 -5
  604. data/test/rubygems/simple_gem.rb +1 -0
  605. data/test/rubygems/specifications/bar-0.0.2.gemspec +1 -1
  606. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +14 -0
  607. data/test/rubygems/ssl_cert.pem +78 -17
  608. data/test/rubygems/ssl_key.pem +25 -13
  609. data/test/rubygems/test_bundled_ca.rb +45 -43
  610. data/test/rubygems/test_config.rb +13 -9
  611. data/test/rubygems/test_deprecate.rb +91 -10
  612. data/test/rubygems/test_exit.rb +17 -0
  613. data/test/rubygems/test_gem.rb +917 -797
  614. data/test/rubygems/test_gem_available_set.rb +25 -25
  615. data/test/rubygems/test_gem_bundler_version_finder.rb +127 -0
  616. data/test/rubygems/test_gem_command.rb +195 -40
  617. data/test/rubygems/test_gem_command_manager.rb +182 -46
  618. data/test/rubygems/test_gem_commands_build_command.rb +646 -28
  619. data/test/rubygems/test_gem_commands_cert_command.rb +321 -126
  620. data/test/rubygems/test_gem_commands_check_command.rb +11 -12
  621. data/test/rubygems/test_gem_commands_cleanup_command.rb +147 -52
  622. data/test/rubygems/test_gem_commands_contents_command.rb +75 -44
  623. data/test/rubygems/test_gem_commands_dependency_command.rb +61 -63
  624. data/test/rubygems/test_gem_commands_environment_command.rb +62 -47
  625. data/test/rubygems/test_gem_commands_exec_command.rb +857 -0
  626. data/test/rubygems/test_gem_commands_fetch_command.rb +164 -33
  627. data/test/rubygems/test_gem_commands_generate_index_command.rb +39 -9
  628. data/test/rubygems/test_gem_commands_help_command.rb +36 -17
  629. data/test/rubygems/test_gem_commands_info_command.rb +70 -0
  630. data/test/rubygems/test_gem_commands_install_command.rb +736 -150
  631. data/test/rubygems/test_gem_commands_list_command.rb +6 -7
  632. data/test/rubygems/test_gem_commands_lock_command.rb +12 -14
  633. data/test/rubygems/test_gem_commands_mirror.rb +4 -4
  634. data/test/rubygems/test_gem_commands_open_command.rb +47 -16
  635. data/test/rubygems/test_gem_commands_outdated_command.rb +25 -8
  636. data/test/rubygems/test_gem_commands_owner_command.rb +368 -70
  637. data/test/rubygems/test_gem_commands_pristine_command.rb +318 -101
  638. data/test/rubygems/test_gem_commands_push_command.rb +331 -58
  639. data/test/rubygems/test_gem_commands_query_command.rb +329 -128
  640. data/test/rubygems/test_gem_commands_search_command.rb +3 -5
  641. data/test/rubygems/test_gem_commands_server_command.rb +7 -47
  642. data/test/rubygems/test_gem_commands_setup_command.rb +404 -66
  643. data/test/rubygems/test_gem_commands_signin_command.rb +259 -0
  644. data/test/rubygems/test_gem_commands_signout_command.rb +30 -0
  645. data/test/rubygems/test_gem_commands_sources_command.rb +316 -31
  646. data/test/rubygems/test_gem_commands_specification_command.rb +82 -56
  647. data/test/rubygems/test_gem_commands_stale_command.rb +9 -9
  648. data/test/rubygems/test_gem_commands_uninstall_command.rb +347 -88
  649. data/test/rubygems/test_gem_commands_unpack_command.rb +49 -34
  650. data/test/rubygems/test_gem_commands_update_command.rb +429 -107
  651. data/test/rubygems/test_gem_commands_which_command.rb +13 -15
  652. data/test/rubygems/test_gem_commands_yank_command.rb +227 -28
  653. data/test/rubygems/test_gem_config_file.rb +168 -108
  654. data/test/rubygems/test_gem_dependency.rb +112 -76
  655. data/test/rubygems/test_gem_dependency_installer.rb +346 -391
  656. data/test/rubygems/test_gem_dependency_list.rb +68 -63
  657. data/test/rubygems/test_gem_dependency_resolution_error.rb +6 -8
  658. data/test/rubygems/test_gem_doctor.rb +75 -49
  659. data/test/rubygems/test_gem_ext_builder.rb +121 -125
  660. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  661. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +10 -0
  662. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +249 -0
  663. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  664. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  665. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  666. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  667. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +249 -0
  668. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  669. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +10 -0
  670. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  671. data/test/rubygems/test_gem_ext_cargo_builder.rb +167 -0
  672. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +34 -0
  673. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  674. data/test/rubygems/test_gem_ext_cmake_builder.rb +33 -36
  675. data/test/rubygems/test_gem_ext_configure_builder.rb +25 -32
  676. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +94 -76
  677. data/test/rubygems/test_gem_ext_rake_builder.rb +79 -31
  678. data/test/rubygems/test_gem_gem_runner.rb +59 -9
  679. data/test/rubygems/test_gem_gemcutter_utilities.rb +210 -84
  680. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -7
  681. data/test/rubygems/test_gem_indexer.rb +121 -107
  682. data/test/rubygems/test_gem_install_update_options.rb +65 -54
  683. data/test/rubygems/test_gem_installer.rb +1517 -557
  684. data/test/rubygems/test_gem_local_remote_options.rb +14 -15
  685. data/test/rubygems/test_gem_name_tuple.rb +5 -7
  686. data/test/rubygems/test_gem_package.rb +673 -243
  687. data/test/rubygems/test_gem_package_old.rb +58 -57
  688. data/test/rubygems/test_gem_package_tar_header.rb +129 -50
  689. data/test/rubygems/test_gem_package_tar_reader.rb +71 -11
  690. data/test/rubygems/test_gem_package_tar_reader_entry.rb +229 -21
  691. data/test/rubygems/test_gem_package_tar_writer.rb +168 -101
  692. data/test/rubygems/test_gem_package_task.rb +59 -25
  693. data/test/rubygems/test_gem_path_support.rb +49 -31
  694. data/test/rubygems/test_gem_platform.rb +393 -204
  695. data/test/rubygems/test_gem_rdoc.rb +23 -156
  696. data/test/rubygems/test_gem_remote_fetcher.rb +580 -404
  697. data/test/rubygems/test_gem_request.rb +270 -86
  698. data/test/rubygems/test_gem_request_connection_pools.rb +57 -35
  699. data/test/rubygems/test_gem_request_set.rb +192 -115
  700. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +300 -278
  701. data/test/rubygems/test_gem_request_set_lockfile.rb +95 -96
  702. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +73 -78
  703. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +138 -137
  704. data/test/rubygems/test_gem_requirement.rb +175 -57
  705. data/test/rubygems/test_gem_resolver.rb +257 -113
  706. data/test/rubygems/test_gem_resolver_activation_request.rb +10 -41
  707. data/test/rubygems/test_gem_resolver_api_set.rb +80 -79
  708. data/test/rubygems/test_gem_resolver_api_specification.rb +64 -42
  709. data/test/rubygems/test_gem_resolver_best_set.rb +44 -23
  710. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -4
  711. data/test/rubygems/test_gem_resolver_conflict.rb +13 -19
  712. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -18
  713. data/test/rubygems/test_gem_resolver_git_set.rb +23 -25
  714. data/test/rubygems/test_gem_resolver_git_specification.rb +23 -23
  715. data/test/rubygems/test_gem_resolver_index_set.rb +15 -17
  716. data/test/rubygems/test_gem_resolver_index_specification.rb +22 -19
  717. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -9
  718. data/test/rubygems/test_gem_resolver_installer_set.rb +110 -48
  719. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -10
  720. data/test/rubygems/test_gem_resolver_lock_set.rb +16 -18
  721. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -20
  722. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -4
  723. data/test/rubygems/test_gem_resolver_specification.rb +10 -12
  724. data/test/rubygems/test_gem_resolver_vendor_set.rb +10 -12
  725. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -13
  726. data/test/rubygems/test_gem_security.rb +116 -82
  727. data/test/rubygems/test_gem_security_policy.rb +128 -134
  728. data/test/rubygems/test_gem_security_signer.rb +58 -49
  729. data/test/rubygems/test_gem_security_trust_dir.rb +19 -21
  730. data/test/rubygems/test_gem_silent_ui.rb +48 -42
  731. data/test/rubygems/test_gem_source.rb +73 -61
  732. data/test/rubygems/test_gem_source_fetch_problem.rb +23 -6
  733. data/test/rubygems/test_gem_source_git.rb +79 -78
  734. data/test/rubygems/test_gem_source_installed.rb +17 -19
  735. data/test/rubygems/test_gem_source_list.rb +6 -5
  736. data/test/rubygems/test_gem_source_local.rb +16 -16
  737. data/test/rubygems/test_gem_source_lock.rb +32 -34
  738. data/test/rubygems/test_gem_source_specific_file.rb +19 -19
  739. data/test/rubygems/test_gem_source_subpath_problem.rb +50 -0
  740. data/test/rubygems/test_gem_source_vendor.rb +14 -16
  741. data/test/rubygems/test_gem_spec_fetcher.rb +89 -62
  742. data/test/rubygems/test_gem_specification.rb +1441 -1104
  743. data/test/rubygems/test_gem_stream_ui.rb +71 -55
  744. data/test/rubygems/test_gem_stub_specification.rb +102 -41
  745. data/test/rubygems/test_gem_text.rb +27 -1
  746. data/test/rubygems/test_gem_uninstaller.rb +289 -99
  747. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -6
  748. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  749. data/test/rubygems/test_gem_uri.rb +41 -0
  750. data/test/rubygems/test_gem_uri_formatter.rb +15 -17
  751. data/test/rubygems/test_gem_util.rb +68 -17
  752. data/test/rubygems/test_gem_validator.rb +12 -16
  753. data/test/rubygems/test_gem_version.rb +123 -40
  754. data/test/rubygems/test_gem_version_option.rb +30 -17
  755. data/test/rubygems/test_kernel.rb +75 -37
  756. data/test/rubygems/test_project_sanity.rb +49 -0
  757. data/test/rubygems/test_remote_fetch_error.rb +20 -0
  758. data/test/rubygems/test_require.rb +527 -117
  759. data/test/rubygems/test_rubygems.rb +76 -0
  760. data/test/rubygems/test_webauthn_listener.rb +143 -0
  761. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  762. data/test/rubygems/test_webauthn_poller.rb +124 -0
  763. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +135 -83
  764. data/test/rubygems/wrong_key_cert.pem +16 -15
  765. data/test/rubygems/wrong_key_cert_32.pem +16 -15
  766. data/test/test_changelog_generator.rb +17 -0
  767. metadata +513 -189
  768. data/.autotest +0 -71
  769. data/.document +0 -5
  770. data/.travis.yml +0 -46
  771. data/CONTRIBUTING.rdoc +0 -129
  772. data/CVE-2013-4287.txt +0 -35
  773. data/CVE-2013-4363.txt +0 -45
  774. data/CVE-2015-3900.txt +0 -40
  775. data/History.txt +0 -3094
  776. data/MAINTAINERS.md +0 -5
  777. data/POLICIES.rdoc +0 -61
  778. data/README.rdoc +0 -54
  779. data/Rakefile +0 -449
  780. data/UPGRADING.rdoc +0 -92
  781. data/appveyor.yml +0 -36
  782. data/bin/gem +0 -25
  783. data/bin/update_rubygems +0 -37
  784. data/lib/gauntlet_rubygems.rb +0 -51
  785. data/lib/rubygems/psych_additions.rb +0 -10
  786. data/lib/rubygems/server.rb +0 -869
  787. data/lib/rubygems/source_local.rb +0 -6
  788. data/lib/rubygems/source_specific_file.rb +0 -5
  789. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  790. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
  791. data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  792. data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  793. data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  794. data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  795. data/lib/rubygems/syck_hack.rb +0 -77
  796. data/lib/ubygems.rb +0 -11
  797. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  798. data/test/rubygems/fix_openssl_warnings.rb +0 -13
  799. data/test/rubygems/test_gem_server.rb +0 -409
  800. data/util/CL2notes +0 -56
  801. data/util/create_certs.rb +0 -157
  802. data/util/create_encrypted_key.rb +0 -17
  803. data/util/generate_spdx_license_list.rb +0 -51
  804. data/util/update_bundled_ca_certificates.rb +0 -118
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
- require 'rubygems/source'
4
- require 'rubygems/indexer'
5
2
 
6
- class TestGemSource < Gem::TestCase
3
+ require_relative "helper"
4
+ require "rubygems/source"
5
+ require "rubygems/indexer"
7
6
 
7
+ class TestGemSource < Gem::TestCase
8
8
  def tuple(*args)
9
9
  Gem::NameTuple.new(*args)
10
10
  end
@@ -13,53 +13,41 @@ class TestGemSource < Gem::TestCase
13
13
  super
14
14
 
15
15
  @specs = spec_fetcher do |fetcher|
16
- fetcher.spec 'a', '1.a'
17
- fetcher.gem 'a', 1
18
- fetcher.spec 'a', 2
19
- fetcher.spec 'b', 2
16
+ fetcher.spec "a", "1.a"
17
+ fetcher.gem "a", 1
18
+ fetcher.spec "a", 2
19
+ fetcher.spec "b", 2
20
20
  end
21
21
 
22
22
  @source = Gem::Source.new(@gem_repo)
23
23
  end
24
24
 
25
25
  def test_initialize_invalid_uri
26
- assert_raises URI::InvalidURIError do
27
- Gem::Source.new 'git@example:a.git'
26
+ assert_raise URI::InvalidURIError do
27
+ Gem::Source.new "git@example:a.git"
28
28
  end
29
29
  end
30
30
 
31
31
  def test_initialize_git
32
- repository = 'git@example:a.git'
32
+ repository = "git@example:a.git"
33
33
 
34
- source = Gem::Source::Git.new 'a', repository, 'master', false
34
+ source = Gem::Source::Git.new "a", repository, nil, false
35
35
 
36
36
  assert_equal repository, source.uri
37
37
  end
38
38
 
39
- def test_api_uri
40
- assert_equal @source.api_uri, @source.uri
41
- end
42
-
43
- def test_api_uri_resolved_from_remote_fetcher
44
- uri = URI.parse "http://gem.example/foo"
45
- @fetcher.api_endpoints[uri] = URI.parse "http://api.blah"
46
-
47
- src = Gem::Source.new uri
48
- assert_equal URI.parse("http://api.blah"), src.api_uri
49
- end
50
-
51
39
  def test_cache_dir_escapes_windows_paths
52
40
  uri = URI.parse("file:///C:/WINDOWS/Temp/gem_repo")
53
41
  root = Gem.spec_cache_dir
54
- cache_dir = @source.cache_dir(uri).gsub(root, '')
42
+ cache_dir = @source.cache_dir(uri).gsub(root, "")
55
43
  assert cache_dir !~ /:/, "#{cache_dir} should not contain a :"
56
44
  end
57
45
 
58
46
  def test_dependency_resolver_set_bundler_api
59
- response = Net::HTTPResponse.new '1.1', 200, 'OK'
60
- response.uri = URI('http://example') if response.respond_to? :uri
47
+ response = Net::HTTPResponse.new "1.1", 200, "OK"
48
+ response.uri = URI("http://example")
61
49
 
62
- @fetcher.data["#{@gem_repo}api/v1/dependencies"] = response
50
+ @fetcher.data[@gem_repo] = response
63
51
 
64
52
  set = @source.dependency_resolver_set
65
53
 
@@ -67,8 +55,6 @@ class TestGemSource < Gem::TestCase
67
55
  end
68
56
 
69
57
  def test_dependency_resolver_set_file_uri
70
- skip 'install builder gem' unless defined? Builder::XChar
71
-
72
58
  Gem::Indexer.new(@tempdir).generate_index
73
59
 
74
60
  source = Gem::Source.new "file://#{@tempdir}/"
@@ -85,11 +71,11 @@ class TestGemSource < Gem::TestCase
85
71
  end
86
72
 
87
73
  def test_fetch_spec
88
- a1 = @specs['a-1']
74
+ a1 = @specs["a-1"]
89
75
 
90
76
  spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
91
77
 
92
- spec = @source.fetch_spec tuple('a', Gem::Version.new(1), 'ruby')
78
+ spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "ruby")
93
79
  assert_equal a1.full_name, spec.full_name
94
80
 
95
81
  cache_dir = @source.cache_dir URI.parse(spec_uri)
@@ -100,7 +86,7 @@ class TestGemSource < Gem::TestCase
100
86
  end
101
87
 
102
88
  def test_fetch_spec_cached
103
- a1 = @specs['a-1']
89
+ a1 = @specs["a-1"]
104
90
 
105
91
  spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
106
92
  @fetcher.data["#{spec_uri}.rz"] = nil
@@ -110,11 +96,11 @@ class TestGemSource < Gem::TestCase
110
96
 
111
97
  cache_file = File.join cache_dir, a1.spec_name
112
98
 
113
- open cache_file, 'wb' do |io|
99
+ File.open cache_file, "wb" do |io|
114
100
  Marshal.dump a1, io
115
101
  end
116
102
 
117
- spec = @source.fetch_spec tuple('a', Gem::Version.new(1), 'ruby')
103
+ spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "ruby")
118
104
  assert_equal a1.full_name, spec.full_name
119
105
  end
120
106
 
@@ -123,24 +109,24 @@ class TestGemSource < Gem::TestCase
123
109
  fetcher.legacy_platform
124
110
  end
125
111
 
126
- spec = @source.fetch_spec tuple('pl', Gem::Version.new(1), 'i386-linux')
112
+ spec = @source.fetch_spec tuple("pl", Gem::Version.new(1), "i386-linux")
127
113
 
128
- assert_equal specs['pl-1-x86-linux'].full_name, spec.full_name
114
+ assert_equal specs["pl-1-x86-linux"].full_name, spec.full_name
129
115
  end
130
116
 
131
117
  def test_fetch_spec_platform_ruby
132
- spec = @source.fetch_spec tuple('a', Gem::Version.new(1), nil)
133
- assert_equal @specs['a-1'].full_name, spec.full_name
118
+ spec = @source.fetch_spec tuple("a", Gem::Version.new(1), nil)
119
+ assert_equal @specs["a-1"].full_name, spec.full_name
134
120
 
135
- spec = @source.fetch_spec tuple('a', Gem::Version.new(1), '')
136
- assert_equal @specs['a-1'].full_name, spec.full_name
121
+ spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "")
122
+ assert_equal @specs["a-1"].full_name, spec.full_name
137
123
  end
138
124
 
139
125
  def test_load_specs
140
- released = @source.load_specs(:released).map { |spec| spec.full_name }
126
+ released = @source.load_specs(:released).map {|spec| spec.full_name }
141
127
  assert_equal %W[a-2 a-1 b-2], released
142
128
 
143
- cache_dir = File.join Gem.spec_cache_dir, 'gems.example.com%80'
129
+ cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
144
130
  assert File.exist?(cache_dir), "#{cache_dir} does not exist"
145
131
 
146
132
  cache_file = File.join cache_dir, "specs.#{Gem.marshal_version}"
@@ -151,19 +137,19 @@ class TestGemSource < Gem::TestCase
151
137
  latest_specs = @source.load_specs :latest
152
138
 
153
139
  # Make sure the cached version is actually different:
154
- latest_specs << Gem::NameTuple.new('cached', Gem::Version.new('1.0.0'), 'ruby')
140
+ latest_specs << Gem::NameTuple.new("cached", Gem::Version.new("1.0.0"), "ruby")
155
141
 
156
142
  @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = nil
157
143
  @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}"] =
158
- ' ' * Marshal.dump(latest_specs).length
144
+ " " * Marshal.dump(latest_specs).length
159
145
 
160
- cache_dir = File.join Gem.spec_cache_dir, 'gems.example.com%80'
146
+ cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
161
147
 
162
148
  FileUtils.mkdir_p cache_dir
163
149
 
164
150
  cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
165
151
 
166
- open cache_file, 'wb' do |io|
152
+ File.open cache_file, "wb" do |io|
167
153
  Marshal.dump latest_specs, io
168
154
  end
169
155
 
@@ -176,18 +162,18 @@ class TestGemSource < Gem::TestCase
176
162
  latest_specs = @source.load_specs :latest
177
163
 
178
164
  # Make sure the cached version is actually different:
179
- latest_specs << Gem::NameTuple.new('fixed', Gem::Version.new('1.0.0'), 'ruby')
165
+ latest_specs << Gem::NameTuple.new("fixed", Gem::Version.new("1.0.0"), "ruby")
180
166
  # Setup valid data on the 'remote'
181
167
  @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
182
168
  util_gzip(Marshal.dump(latest_specs))
183
169
 
184
- cache_dir = File.join Gem.spec_cache_dir, 'gems.example.com%80'
170
+ cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
185
171
 
186
172
  FileUtils.mkdir_p cache_dir
187
173
 
188
174
  cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
189
175
 
190
- open cache_file, 'wb' do |io|
176
+ File.open cache_file, "wb" do |io|
191
177
  # Setup invalid data in the cache:
192
178
  io.write Marshal.dump(latest_specs)[0, 10]
193
179
  end
@@ -200,32 +186,41 @@ class TestGemSource < Gem::TestCase
200
186
  def test_load_specs_from_unavailable_uri
201
187
  src = Gem::Source.new("http://not-there.nothing")
202
188
 
203
- assert_raises Gem::RemoteFetcher::FetchError do
189
+ assert_raise Gem::RemoteFetcher::FetchError do
204
190
  src.load_specs :latest
205
191
  end
206
192
  end
207
193
 
208
194
  def test_spaceship
209
195
  remote = @source
210
- specific = Gem::Source::SpecificFile.new @specs['a-1'].cache_file
196
+ specific = Gem::Source::SpecificFile.new @specs["a-1"].cache_file
211
197
  installed = Gem::Source::Installed.new
212
198
  local = Gem::Source::Local.new
213
199
 
214
- assert_equal( 0, remote. <=>(remote), 'remote <=> remote')
200
+ assert_equal(0, remote.<=>(remote), "remote <=> remote")
215
201
 
216
- assert_equal(-1, remote. <=>(specific), 'remote <=> specific')
217
- assert_equal( 1, specific. <=>(remote), 'specific <=> remote')
202
+ assert_equal(-1, remote.<=>(specific), "remote <=> specific")
203
+ assert_equal(1, specific.<=>(remote), "specific <=> remote")
218
204
 
219
- assert_equal(-1, remote. <=>(local), 'remote <=> local')
220
- assert_equal( 1, local. <=>(remote), 'local <=> remote')
205
+ assert_equal(-1, remote.<=>(local), "remote <=> local")
206
+ assert_equal(1, local.<=>(remote), "local <=> remote")
221
207
 
222
- assert_equal(-1, remote. <=>(installed), 'remote <=> installed')
223
- assert_equal( 1, installed.<=>(remote), 'installed <=> remote')
208
+ assert_equal(-1, remote.<=>(installed), "remote <=> installed")
209
+ assert_equal(1, installed.<=>(remote), "installed <=> remote")
224
210
 
225
211
  no_uri = @source.dup
226
212
  no_uri.instance_variable_set :@uri, nil
227
213
 
228
- assert_equal(-1, remote. <=>(no_uri), 'remote <=> no_uri')
214
+ assert_equal(-1, remote.<=>(no_uri), "remote <=> no_uri")
215
+ end
216
+
217
+ def test_spaceship_order_is_preserved_when_uri_differs
218
+ sourceA = Gem::Source.new "http://example.com/a"
219
+ sourceB = Gem::Source.new "http://example.com/b"
220
+
221
+ assert_equal(0, sourceA.<=>(sourceA), "sourceA <=> sourceA")
222
+ assert_equal(1, sourceA.<=>(sourceB), "sourceA <=> sourceB")
223
+ assert_equal(1, sourceB.<=>(sourceA), "sourceB <=> sourceA")
229
224
  end
230
225
 
231
226
  def test_update_cache_eh
@@ -238,5 +233,22 @@ class TestGemSource < Gem::TestCase
238
233
  refute @source.update_cache?
239
234
  end
240
235
 
241
- end
236
+ def test_typo_squatting
237
+ rubygems_source = Gem::Source.new("https://rubgems.org")
238
+ assert rubygems_source.typo_squatting?("rubygems.org")
239
+ assert rubygems_source.typo_squatting?("rubyagems.org")
240
+ assert rubygems_source.typo_squatting?("rubyasgems.org")
241
+ refute rubygems_source.typo_squatting?("rubysertgems.org")
242
+ end
242
243
 
244
+ def test_typo_squatting_false_positive
245
+ rubygems_source = Gem::Source.new("https://rubygems.org")
246
+ refute rubygems_source.typo_squatting?("rubygems.org")
247
+ end
248
+
249
+ def test_typo_squatting_custom_distance_threshold
250
+ rubygems_source = Gem::Source.new("https://rubgems.org")
251
+ distance_threshold = 5
252
+ assert rubygems_source.typo_squatting?("rubysertgems.org", distance_threshold)
253
+ end
254
+ end
@@ -1,20 +1,37 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
2
 
4
- class TestGemSourceFetchProblem < Gem::TestCase
3
+ require_relative "helper"
5
4
 
5
+ class TestGemSourceFetchProblem < Gem::TestCase
6
6
  def test_exception
7
7
  source = Gem::Source.new @gem_repo
8
- error = RuntimeError.new 'test'
8
+ error = RuntimeError.new "test"
9
9
 
10
10
  sf = Gem::SourceFetchProblem.new source, error
11
11
 
12
- e = assert_raises RuntimeError do
12
+ e = assert_raise RuntimeError do
13
13
  raise sf
14
14
  end
15
15
 
16
- assert_equal 'test', e.message
16
+ assert_equal "test", e.message
17
17
  end
18
18
 
19
- end
19
+ def test_password_redacted
20
+ source = Gem::Source.new "https://username:secret@gemsource.com"
21
+ error = RuntimeError.new "test"
22
+
23
+ sf = Gem::SourceFetchProblem.new source, error
24
+
25
+ refute_match sf.wordy, "secret"
26
+ end
27
+
28
+ def test_source_password_no_redacted
29
+ source = Gem::Source.new "https://username:secret@gemsource.com"
30
+ error = RuntimeError.new "test"
31
+
32
+ sf = Gem::SourceFetchProblem.new source, error
33
+ sf.wordy
20
34
 
35
+ assert_match "secret", source.uri.to_s
36
+ end
37
+ end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
- require 'rubygems/source'
4
2
 
5
- class TestGemSourceGit < Gem::TestCase
3
+ require_relative "helper"
4
+ require "rubygems/source"
6
5
 
6
+ class TestGemSourceGit < Gem::TestCase
7
7
  def setup
8
8
  super
9
9
 
@@ -11,36 +11,37 @@ class TestGemSourceGit < Gem::TestCase
11
11
 
12
12
  @hash = Digest::SHA1.hexdigest @repository
13
13
 
14
- @source = Gem::Source::Git.new @name, @repository, 'master', false
14
+ @source = Gem::Source::Git.new @name, @repository, nil, false
15
15
  end
16
16
 
17
17
  def test_base_dir
18
- assert_equal File.join(Gem.dir, 'bundler'), @source.base_dir
18
+ assert_equal File.join(Gem.dir, "bundler"), @source.base_dir
19
19
 
20
20
  @source.root_dir = "#{@gemhome}2"
21
21
 
22
- assert_equal File.join("#{@gemhome}2", 'bundler'), @source.base_dir
22
+ assert_equal File.join("#{@gemhome}2", "bundler"), @source.base_dir
23
23
  end
24
24
 
25
25
  def test_checkout
26
26
  @source.checkout
27
27
 
28
- assert_path_exists File.join @source.install_dir, 'a.gemspec'
28
+ assert_path_exist File.join @source.install_dir, "a.gemspec"
29
29
  end
30
30
 
31
- def test_checkout_master
31
+ def test_checkout_default
32
32
  Dir.chdir @repository do
33
- system @git, 'checkout', '-q', '-b', 'other'
34
- system @git, 'mv', 'a.gemspec', 'b.gemspec'
35
- system @git, 'commit', '-q', '-a', '-m', 'rename gemspec'
36
- system @git, 'checkout', '-q', 'master'
33
+ default_branch = Gem::Util.popen(@git, "branch", "--show-current").strip
34
+ system @git, "checkout", "-q", "-b", "other"
35
+ system @git, "mv", "a.gemspec", "b.gemspec"
36
+ system @git, "commit", "-q", "-a", "-m", "rename gemspec"
37
+ system @git, "checkout", "-q", default_branch
37
38
  end
38
39
 
39
- @source = Gem::Source::Git.new @name, @repository, 'other', false
40
+ @source = Gem::Source::Git.new @name, @repository, "other", false
40
41
 
41
42
  @source.checkout
42
43
 
43
- assert_path_exists File.join @source.install_dir, 'b.gemspec'
44
+ assert_path_exist File.join @source.install_dir, "b.gemspec"
44
45
  end
45
46
 
46
47
  def test_checkout_local
@@ -48,9 +49,9 @@ class TestGemSourceGit < Gem::TestCase
48
49
 
49
50
  @source.checkout
50
51
 
51
- install_dir = File.join Gem.dir, 'bundler', 'gems', "a-#{@head[0..11]}"
52
+ install_dir = File.join Gem.dir, "bundler", "gems", "a-#{@head[0..11]}"
52
53
 
53
- refute_path_exists File.join install_dir, 'a.gemspec'
54
+ assert_path_not_exist File.join install_dir, "a.gemspec"
54
55
  end
55
56
 
56
57
  def test_checkout_local_cached
@@ -60,33 +61,40 @@ class TestGemSourceGit < Gem::TestCase
60
61
 
61
62
  @source.checkout
62
63
 
63
- assert_path_exists File.join @source.install_dir, 'a.gemspec'
64
+ assert_path_exist File.join @source.install_dir, "a.gemspec"
64
65
  end
65
66
 
66
67
  def test_checkout_submodules
67
- source = Gem::Source::Git.new @name, @repository, 'master', true
68
+ # We need to allow to checkout submodules with file:// protocol
69
+ # CVE-2022-39253
70
+ # https://lore.kernel.org/lkml/xmqq4jw1uku5.fsf@gitster.g/
71
+ system(@git, *%W[config --global protocol.file.allow always])
72
+
73
+ source = Gem::Source::Git.new @name, @repository, nil, true
74
+
75
+ git_gem "b"
68
76
 
69
- git_gem 'b'
77
+ Dir.chdir "git/a" do
78
+ require "open3"
79
+ output, status = Open3.capture2e(@git, "submodule", "--quiet", "add", File.expand_path("../b"), "b")
80
+ assert status.success?, output
70
81
 
71
- Dir.chdir 'git/a' do
72
- Gem::Util.silent_system @git, 'submodule', '--quiet',
73
- 'add', File.expand_path('../b'), 'b'
74
- system @git, 'commit', '--quiet', '-m', 'add submodule b'
82
+ system @git, "commit", "--quiet", "-m", "add submodule b"
75
83
  end
76
84
 
77
85
  source.checkout
78
86
 
79
- assert_path_exists File.join source.install_dir, 'a.gemspec'
80
- assert_path_exists File.join source.install_dir, 'b/b.gemspec'
87
+ assert_path_exist File.join source.install_dir, "a.gemspec"
88
+ assert_path_exist File.join source.install_dir, "b/b.gemspec"
81
89
  end
82
90
 
83
91
  def test_cache
84
92
  assert @source.cache
85
93
 
86
- assert_path_exists @source.repo_cache_dir
94
+ assert_path_exist @source.repo_cache_dir
87
95
 
88
96
  Dir.chdir @source.repo_cache_dir do
89
- assert_equal @head, Gem::Util.popen(@git, 'rev-parse', 'master').strip
97
+ assert_equal @head, Gem::Util.popen(@git, "rev-parse", "HEAD").strip
90
98
  end
91
99
  end
92
100
 
@@ -95,7 +103,7 @@ class TestGemSourceGit < Gem::TestCase
95
103
 
96
104
  @source.cache
97
105
 
98
- refute_path_exists @source.repo_cache_dir
106
+ assert_path_not_exist @source.repo_cache_dir
99
107
  end
100
108
 
101
109
  def test_dir_shortref
@@ -114,17 +122,17 @@ class TestGemSourceGit < Gem::TestCase
114
122
  assert_equal @source, @source.dup
115
123
 
116
124
  source =
117
- Gem::Source::Git.new @source.name, @source.repository, 'other', false
125
+ Gem::Source::Git.new @source.name, @source.repository, "other", false
118
126
 
119
127
  refute_equal @source, source
120
128
 
121
129
  source =
122
- Gem::Source::Git.new @source.name, 'repo/other', @source.reference, false
130
+ Gem::Source::Git.new @source.name, "repo/other", @source.reference, false
123
131
 
124
132
  refute_equal @source, source
125
133
 
126
134
  source =
127
- Gem::Source::Git.new 'b', @source.repository, @source.reference, false
135
+ Gem::Source::Git.new "b", @source.repository, @source.reference, false
128
136
 
129
137
  refute_equal @source, source
130
138
 
@@ -138,7 +146,7 @@ class TestGemSourceGit < Gem::TestCase
138
146
  def test_install_dir
139
147
  @source.cache
140
148
 
141
- expected = File.join Gem.dir, 'bundler', 'gems', "a-#{@head[0..11]}"
149
+ expected = File.join Gem.dir, "bundler", "gems", "a-#{@head[0..11]}"
142
150
 
143
151
  assert_equal expected, @source.install_dir
144
152
  end
@@ -151,14 +159,14 @@ class TestGemSourceGit < Gem::TestCase
151
159
 
152
160
  def test_repo_cache_dir
153
161
  expected =
154
- File.join Gem.dir, 'cache', 'bundler', 'git', "a-#{@hash}"
162
+ File.join Gem.dir, "cache", "bundler", "git", "a-#{@hash}"
155
163
 
156
164
  assert_equal expected, @source.repo_cache_dir
157
165
 
158
166
  @source.root_dir = "#{@gemhome}2"
159
167
 
160
168
  expected =
161
- File.join "#{@gemhome}2", 'cache', 'bundler', 'git', "a-#{@hash}"
169
+ File.join "#{@gemhome}2", "cache", "bundler", "git", "a-#{@hash}"
162
170
 
163
171
  assert_equal expected, @source.repo_cache_dir
164
172
  end
@@ -169,25 +177,25 @@ class TestGemSourceGit < Gem::TestCase
169
177
  assert_equal @head, @source.rev_parse
170
178
 
171
179
  Dir.chdir @repository do
172
- system @git, 'checkout', '--quiet', '-b', 'other'
180
+ system @git, "checkout", "--quiet", "-b", "other"
173
181
  end
174
182
 
175
- master_head = @head
183
+ default_head = @head
176
184
 
177
- git_gem 'a', 2
185
+ git_gem "a", 2
178
186
 
179
- source = Gem::Source::Git.new @name, @repository, 'other', false
187
+ source = Gem::Source::Git.new @name, @repository, "other", false
180
188
 
181
189
  source.cache
182
190
 
183
- refute_equal master_head, source.rev_parse
191
+ refute_equal default_head, source.rev_parse
184
192
 
185
- source = Gem::Source::Git.new @name, @repository, 'nonexistent', false
193
+ source = Gem::Source::Git.new @name, @repository, "nonexistent", false
186
194
 
187
195
  source.cache
188
196
 
189
- e = assert_raises Gem::Exception do
190
- capture_subprocess_io {source.rev_parse}
197
+ e = assert_raise Gem::Exception do
198
+ capture_subprocess_io { source.rev_parse }
191
199
  end
192
200
 
193
201
  assert_equal "unable to find reference nonexistent in #{@repository}",
@@ -203,64 +211,59 @@ class TestGemSourceGit < Gem::TestCase
203
211
  end
204
212
 
205
213
  def test_spaceship
206
- git = Gem::Source::Git.new 'a', 'git/a', 'master', false
214
+ git = Gem::Source::Git.new "a", "git/a", nil, false
207
215
  remote = Gem::Source.new @gem_repo
208
216
  installed = Gem::Source::Installed.new
209
- vendor = Gem::Source::Vendor.new 'vendor/foo'
217
+ vendor = Gem::Source::Vendor.new "vendor/foo"
210
218
 
211
- assert_equal( 0, git. <=>(git), 'git <=> git')
219
+ assert_equal(0, git.<=>(git), "git <=> git")
212
220
 
213
- assert_equal( 1, git. <=>(remote), 'git <=> remote')
214
- assert_equal(-1, remote. <=>(git), 'remote <=> git')
221
+ assert_equal(1, git.<=>(remote), "git <=> remote")
222
+ assert_equal(-1, remote.<=>(git), "remote <=> git")
215
223
 
216
- assert_equal( 1, git. <=>(installed), 'git <=> installed')
217
- assert_equal(-1, installed.<=>(git), 'installed <=> git')
224
+ assert_equal(1, git.<=>(installed), "git <=> installed")
225
+ assert_equal(-1, installed.<=>(git), "installed <=> git")
218
226
 
219
- assert_equal(-1, git. <=>(vendor), 'git <=> vendor')
220
- assert_equal( 1, vendor. <=>(git), 'vendor <=> git')
227
+ assert_equal(-1, git.<=>(vendor), "git <=> vendor")
228
+ assert_equal(1, vendor.<=>(git), "vendor <=> git")
221
229
  end
222
230
 
223
231
  def test_specs
224
- source = Gem::Source::Git.new @name, @repository, 'master', true
232
+ source = Gem::Source::Git.new @name, @repository, nil, true
225
233
 
226
- Dir.chdir 'git/a' do
227
- FileUtils.mkdir 'b'
234
+ Dir.chdir "git/a" do
235
+ FileUtils.mkdir "b"
228
236
 
229
- Dir.chdir 'b' do
230
- b = Gem::Specification.new 'b', 1
237
+ Dir.chdir "b" do
238
+ b = Gem::Specification.new "b", 1
231
239
 
232
- open 'b.gemspec', 'w' do |io|
240
+ File.open "b.gemspec", "w" do |io|
233
241
  io.write b.to_ruby
234
242
  end
235
243
 
236
- system @git, 'add', 'b.gemspec'
237
- system @git, 'commit', '--quiet', '-m', 'add b/b.gemspec'
244
+ system @git, "add", "b.gemspec"
245
+ system @git, "commit", "--quiet", "-m", "add b/b.gemspec"
238
246
  end
239
-
240
- FileUtils.touch 'c.gemspec'
241
-
242
- system @git, 'add', 'c.gemspec'
243
- system @git, 'commit', '--quiet', '-m', 'add c.gemspec'
244
247
  end
245
248
 
246
249
  specs = nil
247
250
 
248
- capture_io do
251
+ capture_output do
249
252
  specs = source.specs
250
253
  end
251
254
 
252
- assert_equal %w[a-1 b-1], specs.map { |spec| spec.full_name }
255
+ assert_equal %w[a-1 b-1], specs.map {|spec| spec.full_name }
253
256
 
254
257
  a_spec = specs.shift
255
258
 
256
259
  base_dir = File.dirname File.dirname source.install_dir
257
260
 
258
261
  assert_equal source.install_dir, a_spec.full_gem_path
259
- assert_equal File.join(source.install_dir, 'a.gemspec'), a_spec.loaded_from
262
+ assert_equal File.join(source.install_dir, "a.gemspec"), a_spec.loaded_from
260
263
  assert_equal base_dir, a_spec.base_dir
261
264
 
262
265
  extension_dir =
263
- File.join Gem.dir, 'bundler', 'extensions',
266
+ File.join Gem.dir, "bundler", "extensions",
264
267
  Gem::Platform.local.to_s, Gem.extension_api_version,
265
268
  "a-#{source.dir_shortref}"
266
269
 
@@ -268,8 +271,8 @@ class TestGemSourceGit < Gem::TestCase
268
271
 
269
272
  b_spec = specs.shift
270
273
 
271
- assert_equal File.join(source.install_dir, 'b'), b_spec.full_gem_path
272
- assert_equal File.join(source.install_dir, 'b', 'b.gemspec'),
274
+ assert_equal File.join(source.install_dir, "b"), b_spec.full_gem_path
275
+ assert_equal File.join(source.install_dir, "b", "b.gemspec"),
273
276
  b_spec.loaded_from
274
277
  assert_equal base_dir, b_spec.base_dir
275
278
 
@@ -277,10 +280,10 @@ class TestGemSourceGit < Gem::TestCase
277
280
  end
278
281
 
279
282
  def test_specs_local
280
- source = Gem::Source::Git.new @name, @repository, 'master', true
283
+ source = Gem::Source::Git.new @name, @repository, nil, true
281
284
  source.remote = false
282
285
 
283
- capture_io do
286
+ capture_output do
284
287
  assert_empty source.specs
285
288
  end
286
289
  end
@@ -293,17 +296,15 @@ class TestGemSourceGit < Gem::TestCase
293
296
  assert_equal @hash, @source.uri_hash
294
297
 
295
298
  source =
296
- Gem::Source::Git.new 'a', 'http://git@example/repo.git', 'master', false
299
+ Gem::Source::Git.new "a", "http://git@example/repo.git", nil, false
297
300
 
298
- assert_equal '291c4caac7feba8bb64c297987028acb3dde6cfe',
301
+ assert_equal "291c4caac7feba8bb64c297987028acb3dde6cfe",
299
302
  source.uri_hash
300
303
 
301
304
  source =
302
- Gem::Source::Git.new 'a', 'HTTP://git@EXAMPLE/repo.git', 'master', false
305
+ Gem::Source::Git.new "a", "HTTP://git@EXAMPLE/repo.git", nil, false
303
306
 
304
- assert_equal '291c4caac7feba8bb64c297987028acb3dde6cfe',
307
+ assert_equal "291c4caac7feba8bb64c297987028acb3dde6cfe",
305
308
  source.uri_hash
306
309
  end
307
-
308
310
  end
309
-