rubygems-update 2.6.1 → 3.5.0

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 (801) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +5899 -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 +428 -216
  7. data/POLICIES.md +135 -0
  8. data/README.md +112 -0
  9. data/UPGRADING.md +15 -0
  10. data/bundler/CHANGELOG.md +4719 -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 +245 -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 +1005 -0
  59. data/bundler/lib/bundler/dependency.rb +101 -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 +601 -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 +170 -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 +117 -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 +247 -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/LICENSE +20 -0
  250. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  251. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  252. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  253. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
  254. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  255. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2694 -0
  256. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  257. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  258. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  259. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  260. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -0
  261. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  262. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  263. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  264. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  265. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  266. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  267. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  268. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  269. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  270. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  271. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  272. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  273. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  274. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  275. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  276. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  277. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  278. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
  284. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  285. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  286. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  287. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  288. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  289. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  290. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
  291. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  292. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  293. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  294. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  295. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  296. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
  297. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  298. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  299. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
  300. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  301. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  302. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  303. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
  304. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +115 -0
  305. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  306. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +84 -0
  307. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  308. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  309. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  310. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  311. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  312. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  313. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  314. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
  315. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  316. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  317. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  318. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +853 -0
  319. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  320. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  321. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1588 -0
  322. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  323. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  324. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  325. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  326. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  327. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  328. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +183 -0
  329. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  330. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  331. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  332. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  333. data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
  334. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  335. data/bundler/lib/bundler/vendored_persistent.rb +11 -0
  336. data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
  337. data/bundler/lib/bundler/vendored_thor.rb +8 -0
  338. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  339. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  340. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  341. data/bundler/lib/bundler/version.rb +13 -0
  342. data/bundler/lib/bundler/vlad.rb +17 -0
  343. data/bundler/lib/bundler/worker.rb +117 -0
  344. data/bundler/lib/bundler/yaml_serializer.rb +93 -0
  345. data/bundler/lib/bundler.rb +665 -0
  346. data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
  347. data/exe/update_rubygems +38 -0
  348. data/hide_lib_for_update/note.txt +0 -4
  349. data/lib/rubygems/available_set.rb +12 -12
  350. data/lib/rubygems/basic_specification.rb +75 -58
  351. data/lib/rubygems/bundler_version_finder.rb +77 -0
  352. data/lib/rubygems/ci_detector.rb +75 -0
  353. data/lib/rubygems/command.rb +144 -71
  354. data/lib/rubygems/command_manager.rb +64 -27
  355. data/lib/rubygems/commands/build_command.rb +88 -17
  356. data/lib/rubygems/commands/cert_command.rb +131 -83
  357. data/lib/rubygems/commands/check_command.rb +30 -27
  358. data/lib/rubygems/commands/cleanup_command.rb +57 -40
  359. data/lib/rubygems/commands/contents_command.rb +37 -39
  360. data/lib/rubygems/commands/dependency_command.rb +53 -65
  361. data/lib/rubygems/commands/environment_command.rb +32 -16
  362. data/lib/rubygems/commands/exec_command.rb +249 -0
  363. data/lib/rubygems/commands/fetch_command.rb +36 -19
  364. data/lib/rubygems/commands/generate_index_command.rb +40 -74
  365. data/lib/rubygems/commands/help_command.rb +22 -22
  366. data/lib/rubygems/commands/info_command.rb +38 -0
  367. data/lib/rubygems/commands/install_command.rb +67 -143
  368. data/lib/rubygems/commands/list_command.rb +10 -9
  369. data/lib/rubygems/commands/lock_command.rb +12 -14
  370. data/lib/rubygems/commands/mirror_command.rb +4 -4
  371. data/lib/rubygems/commands/open_command.rb +28 -26
  372. data/lib/rubygems/commands/outdated_command.rb +6 -6
  373. data/lib/rubygems/commands/owner_command.rb +51 -27
  374. data/lib/rubygems/commands/pristine_command.rb +99 -71
  375. data/lib/rubygems/commands/push_command.rb +53 -46
  376. data/lib/rubygems/commands/query_command.rb +21 -328
  377. data/lib/rubygems/commands/rdoc_command.rb +33 -33
  378. data/lib/rubygems/commands/search_command.rb +9 -9
  379. data/lib/rubygems/commands/server_command.rb +15 -76
  380. data/lib/rubygems/commands/setup_command.rb +370 -186
  381. data/lib/rubygems/commands/signin_command.rb +34 -0
  382. data/lib/rubygems/commands/signout_command.rb +32 -0
  383. data/lib/rubygems/commands/sources_command.rb +57 -41
  384. data/lib/rubygems/commands/specification_command.rb +38 -28
  385. data/lib/rubygems/commands/stale_command.rb +6 -5
  386. data/lib/rubygems/commands/uninstall_command.rb +96 -62
  387. data/lib/rubygems/commands/unpack_command.rb +44 -53
  388. data/lib/rubygems/commands/update_command.rb +155 -99
  389. data/lib/rubygems/commands/which_command.rb +14 -17
  390. data/lib/rubygems/commands/yank_command.rb +28 -32
  391. data/lib/rubygems/compatibility.rb +13 -32
  392. data/lib/rubygems/config_file.rb +214 -119
  393. data/lib/rubygems/core_ext/kernel_gem.rb +10 -16
  394. data/lib/rubygems/core_ext/kernel_require.rb +92 -90
  395. data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
  396. data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
  397. data/lib/rubygems/defaults.rb +184 -54
  398. data/lib/rubygems/dependency.rb +75 -62
  399. data/lib/rubygems/dependency_installer.rb +74 -230
  400. data/lib/rubygems/dependency_list.rb +32 -33
  401. data/lib/rubygems/deprecate.rb +113 -17
  402. data/lib/rubygems/doctor.rb +31 -31
  403. data/lib/rubygems/errors.rb +51 -13
  404. data/lib/rubygems/exceptions.rb +65 -35
  405. data/lib/rubygems/ext/build_error.rb +3 -1
  406. data/lib/rubygems/ext/builder.rb +103 -77
  407. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  408. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  409. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  410. data/lib/rubygems/ext/configure_builder.rb +6 -9
  411. data/lib/rubygems/ext/ext_conf_builder.rb +40 -61
  412. data/lib/rubygems/ext/rake_builder.rb +18 -21
  413. data/lib/rubygems/ext.rb +8 -7
  414. data/lib/rubygems/gem_runner.rb +19 -21
  415. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  416. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  417. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  418. data/lib/rubygems/gemcutter_utilities.rb +246 -43
  419. data/lib/rubygems/install_default_message.rb +3 -3
  420. data/lib/rubygems/install_message.rb +3 -3
  421. data/lib/rubygems/install_update_options.rb +104 -98
  422. data/lib/rubygems/installer.rb +407 -225
  423. data/lib/rubygems/installer_uninstaller_utils.rb +27 -0
  424. data/lib/rubygems/local_remote_options.rb +29 -32
  425. data/lib/rubygems/name_tuple.rb +18 -23
  426. data/lib/rubygems/net/http.rb +3 -0
  427. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  428. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  429. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  430. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  431. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  432. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  433. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  434. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  435. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  436. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  437. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  438. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  439. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  440. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  441. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  442. data/lib/rubygems/openssl.rb +7 -0
  443. data/lib/rubygems/optparse/.document +1 -0
  444. data/lib/rubygems/optparse/COPYING +56 -0
  445. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  446. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  447. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  448. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  449. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  450. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  451. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  452. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  453. data/lib/rubygems/optparse/lib/optparse.rb +2330 -0
  454. data/lib/rubygems/optparse.rb +3 -0
  455. data/lib/rubygems/package/digest_io.rb +5 -7
  456. data/lib/rubygems/package/file_source.rb +6 -8
  457. data/lib/rubygems/package/io_source.rb +6 -4
  458. data/lib/rubygems/package/old.rb +19 -28
  459. data/lib/rubygems/package/source.rb +1 -1
  460. data/lib/rubygems/package/tar_header.rb +114 -93
  461. data/lib/rubygems/package/tar_reader/entry.rb +116 -22
  462. data/lib/rubygems/package/tar_reader.rb +18 -40
  463. data/lib/rubygems/package/tar_writer.rb +42 -56
  464. data/lib/rubygems/package.rb +245 -145
  465. data/lib/rubygems/package_task.rb +8 -14
  466. data/lib/rubygems/path_support.rb +21 -16
  467. data/lib/rubygems/platform.rb +135 -74
  468. data/lib/rubygems/psych_tree.rb +3 -2
  469. data/lib/rubygems/query_utils.rb +349 -0
  470. data/lib/rubygems/rdoc.rb +4 -326
  471. data/lib/rubygems/remote_fetcher.rb +99 -181
  472. data/lib/rubygems/request/connection_pools.rb +31 -24
  473. data/lib/rubygems/request/http_pool.rb +6 -7
  474. data/lib/rubygems/request/https_pool.rb +2 -3
  475. data/lib/rubygems/request.rb +103 -53
  476. data/lib/rubygems/request_set/gem_dependency_api.rb +182 -190
  477. data/lib/rubygems/request_set/lockfile/parser.rb +42 -52
  478. data/lib/rubygems/request_set/lockfile/tokenizer.rb +34 -24
  479. data/lib/rubygems/request_set/lockfile.rb +32 -35
  480. data/lib/rubygems/request_set.rb +115 -71
  481. data/lib/rubygems/requirement.rb +77 -68
  482. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  483. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  484. data/lib/rubygems/resolver/activation_request.rb +34 -61
  485. data/lib/rubygems/resolver/api_set/gem_parser.rb +24 -0
  486. data/lib/rubygems/resolver/api_set.rb +40 -32
  487. data/lib/rubygems/resolver/api_specification.rb +37 -18
  488. data/lib/rubygems/resolver/best_set.rb +15 -17
  489. data/lib/rubygems/resolver/composed_set.rb +9 -11
  490. data/lib/rubygems/resolver/conflict.rb +19 -33
  491. data/lib/rubygems/resolver/current_set.rb +2 -4
  492. data/lib/rubygems/resolver/dependency_request.rb +8 -9
  493. data/lib/rubygems/resolver/git_set.rb +8 -10
  494. data/lib/rubygems/resolver/git_specification.rb +11 -13
  495. data/lib/rubygems/resolver/index_set.rb +13 -15
  496. data/lib/rubygems/resolver/index_specification.rb +42 -11
  497. data/lib/rubygems/resolver/installed_specification.rb +9 -11
  498. data/lib/rubygems/resolver/installer_set.rb +87 -45
  499. data/lib/rubygems/resolver/local_specification.rb +5 -7
  500. data/lib/rubygems/resolver/lock_set.rb +13 -15
  501. data/lib/rubygems/resolver/lock_specification.rb +13 -15
  502. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  503. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  504. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
  505. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  506. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  507. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  508. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  509. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  510. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  511. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  512. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  513. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
  514. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
  515. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
  516. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  517. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  518. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  519. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
  520. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  521. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
  522. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  523. data/lib/rubygems/resolver/molinillo.rb +2 -1
  524. data/lib/rubygems/resolver/requirement_list.rb +2 -2
  525. data/lib/rubygems/resolver/set.rb +3 -5
  526. data/lib/rubygems/resolver/source_set.rb +6 -7
  527. data/lib/rubygems/resolver/spec_specification.rb +16 -4
  528. data/lib/rubygems/resolver/specification.rb +25 -10
  529. data/lib/rubygems/resolver/stats.rb +1 -0
  530. data/lib/rubygems/resolver/vendor_set.rb +6 -8
  531. data/lib/rubygems/resolver/vendor_specification.rb +6 -8
  532. data/lib/rubygems/resolver.rb +121 -72
  533. data/lib/rubygems/s3_uri_signer.rb +177 -0
  534. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  535. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  536. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  537. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  538. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  539. data/lib/rubygems/safe_marshal.rb +74 -0
  540. data/lib/rubygems/safe_yaml.rb +36 -0
  541. data/lib/rubygems/security/policies.rb +49 -51
  542. data/lib/rubygems/security/policy.rb +46 -53
  543. data/lib/rubygems/security/signer.rb +86 -29
  544. data/lib/rubygems/security/trust_dir.rb +22 -24
  545. data/lib/rubygems/security.rb +101 -82
  546. data/lib/rubygems/security_option.rb +43 -0
  547. data/lib/rubygems/shellwords.rb +3 -0
  548. data/lib/rubygems/source/git.rb +40 -42
  549. data/lib/rubygems/source/installed.rb +5 -9
  550. data/lib/rubygems/source/local.rb +30 -33
  551. data/lib/rubygems/source/lock.rb +10 -10
  552. data/lib/rubygems/source/specific_file.rb +7 -9
  553. data/lib/rubygems/source/vendor.rb +3 -7
  554. data/lib/rubygems/source.rb +78 -68
  555. data/lib/rubygems/source_list.rb +11 -15
  556. data/lib/rubygems/spec_fetcher.rb +71 -83
  557. data/lib/rubygems/specification.rb +833 -1115
  558. data/lib/rubygems/specification_policy.rb +538 -0
  559. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
  560. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  561. data/lib/rubygems/stub_specification.rb +55 -57
  562. data/lib/rubygems/text.rb +39 -27
  563. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  564. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  565. data/lib/rubygems/timeout.rb +3 -0
  566. data/lib/rubygems/tsort/.document +1 -0
  567. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  568. data/lib/rubygems/tsort/lib/tsort.rb +455 -0
  569. data/lib/rubygems/tsort.rb +3 -0
  570. data/lib/rubygems/uninstaller.rb +150 -87
  571. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  572. data/lib/rubygems/update_suggestion.rb +56 -0
  573. data/lib/rubygems/uri.rb +126 -0
  574. data/lib/rubygems/uri_formatter.rb +4 -7
  575. data/lib/rubygems/user_interaction.rb +92 -146
  576. data/lib/rubygems/util/licenses.rb +712 -317
  577. data/lib/rubygems/util/list.rb +5 -2
  578. data/lib/rubygems/util.rb +58 -75
  579. data/lib/rubygems/validator.rb +26 -48
  580. data/lib/rubygems/version.rb +106 -56
  581. data/lib/rubygems/version_option.rb +22 -14
  582. data/lib/rubygems/yaml_serializer.rb +93 -0
  583. data/lib/rubygems.rb +427 -361
  584. data/rubygems-update.gemspec +38 -0
  585. data/setup.rb +13 -27
  586. metadata +500 -363
  587. data/.autotest +0 -71
  588. data/.document +0 -5
  589. data/.travis.yml +0 -46
  590. data/CONTRIBUTING.rdoc +0 -129
  591. data/CVE-2013-4287.txt +0 -35
  592. data/CVE-2013-4363.txt +0 -45
  593. data/CVE-2015-3900.txt +0 -40
  594. data/History.txt +0 -3105
  595. data/MAINTAINERS.md +0 -5
  596. data/POLICIES.rdoc +0 -61
  597. data/README.rdoc +0 -54
  598. data/Rakefile +0 -449
  599. data/UPGRADING.rdoc +0 -92
  600. data/appveyor.yml +0 -36
  601. data/bin/gem +0 -25
  602. data/bin/update_rubygems +0 -37
  603. data/lib/gauntlet_rubygems.rb +0 -51
  604. data/lib/rubygems/indexer.rb +0 -434
  605. data/lib/rubygems/installer_test_case.rb +0 -194
  606. data/lib/rubygems/mock_gem_ui.rb +0 -89
  607. data/lib/rubygems/package/tar_test_case.rb +0 -147
  608. data/lib/rubygems/psych_additions.rb +0 -10
  609. data/lib/rubygems/server.rb +0 -869
  610. data/lib/rubygems/source_local.rb +0 -6
  611. data/lib/rubygems/source_specific_file.rb +0 -5
  612. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  613. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
  614. data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  615. data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  616. data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  617. data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  618. data/lib/rubygems/syck_hack.rb +0 -77
  619. data/lib/rubygems/test_case.rb +0 -1496
  620. data/lib/rubygems/test_utilities.rb +0 -384
  621. data/lib/ubygems.rb +0 -11
  622. data/test/rubygems/alternate_cert.pem +0 -18
  623. data/test/rubygems/alternate_cert_32.pem +0 -18
  624. data/test/rubygems/alternate_key.pem +0 -27
  625. data/test/rubygems/bad_rake.rb +0 -2
  626. data/test/rubygems/ca_cert.pem +0 -68
  627. data/test/rubygems/child_cert.pem +0 -18
  628. data/test/rubygems/child_cert_32.pem +0 -18
  629. data/test/rubygems/child_key.pem +0 -27
  630. data/test/rubygems/client.pem +0 -49
  631. data/test/rubygems/data/gem-private_key.pem +0 -27
  632. data/test/rubygems/data/gem-public_cert.pem +0 -20
  633. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  634. data/test/rubygems/encrypted_private_key.pem +0 -30
  635. data/test/rubygems/expired_cert.pem +0 -18
  636. data/test/rubygems/fake_certlib/openssl.rb +0 -8
  637. data/test/rubygems/fix_openssl_warnings.rb +0 -13
  638. data/test/rubygems/foo/discover.rb +0 -1
  639. data/test/rubygems/future_cert.pem +0 -18
  640. data/test/rubygems/future_cert_32.pem +0 -18
  641. data/test/rubygems/good_rake.rb +0 -2
  642. data/test/rubygems/grandchild_cert.pem +0 -18
  643. data/test/rubygems/grandchild_cert_32.pem +0 -18
  644. data/test/rubygems/grandchild_key.pem +0 -27
  645. data/test/rubygems/invalid_client.pem +0 -49
  646. data/test/rubygems/invalid_issuer_cert.pem +0 -18
  647. data/test/rubygems/invalid_issuer_cert_32.pem +0 -18
  648. data/test/rubygems/invalid_key.pem +0 -27
  649. data/test/rubygems/invalid_signer_cert.pem +0 -18
  650. data/test/rubygems/invalid_signer_cert_32.pem +0 -18
  651. data/test/rubygems/invalidchild_cert.pem +0 -18
  652. data/test/rubygems/invalidchild_cert_32.pem +0 -18
  653. data/test/rubygems/invalidchild_key.pem +0 -27
  654. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
  655. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
  656. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
  657. data/test/rubygems/private_key.pem +0 -27
  658. data/test/rubygems/public_cert.pem +0 -18
  659. data/test/rubygems/public_cert_32.pem +0 -18
  660. data/test/rubygems/public_key.pem +0 -9
  661. data/test/rubygems/rubygems/commands/crash_command.rb +0 -6
  662. data/test/rubygems/rubygems_plugin.rb +0 -22
  663. data/test/rubygems/sff/discover.rb +0 -1
  664. data/test/rubygems/simple_gem.rb +0 -67
  665. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  666. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  667. data/test/rubygems/ssl_cert.pem +0 -19
  668. data/test/rubygems/ssl_key.pem +0 -15
  669. data/test/rubygems/test_bundled_ca.rb +0 -59
  670. data/test/rubygems/test_config.rb +0 -24
  671. data/test/rubygems/test_deprecate.rb +0 -77
  672. data/test/rubygems/test_gem.rb +0 -1718
  673. data/test/rubygems/test_gem_available_set.rb +0 -130
  674. data/test/rubygems/test_gem_command.rb +0 -248
  675. data/test/rubygems/test_gem_command_manager.rb +0 -264
  676. data/test/rubygems/test_gem_commands_build_command.rb +0 -121
  677. data/test/rubygems/test_gem_commands_cert_command.rb +0 -671
  678. data/test/rubygems/test_gem_commands_check_command.rb +0 -69
  679. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -197
  680. data/test/rubygems/test_gem_commands_contents_command.rb +0 -240
  681. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -230
  682. data/test/rubygems/test_gem_commands_environment_command.rb +0 -154
  683. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -127
  684. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -51
  685. data/test/rubygems/test_gem_commands_help_command.rb +0 -75
  686. data/test/rubygems/test_gem_commands_install_command.rb +0 -1007
  687. data/test/rubygems/test_gem_commands_list_command.rb +0 -34
  688. data/test/rubygems/test_gem_commands_lock_command.rb +0 -69
  689. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  690. data/test/rubygems/test_gem_commands_open_command.rb +0 -70
  691. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -33
  692. data/test/rubygems/test_gem_commands_owner_command.rb +0 -205
  693. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -491
  694. data/test/rubygems/test_gem_commands_push_command.rb +0 -330
  695. data/test/rubygems/test_gem_commands_query_command.rb +0 -657
  696. data/test/rubygems/test_gem_commands_search_command.rb +0 -18
  697. data/test/rubygems/test_gem_commands_server_command.rb +0 -60
  698. data/test/rubygems/test_gem_commands_setup_command.rb +0 -136
  699. data/test/rubygems/test_gem_commands_sources_command.rb +0 -249
  700. data/test/rubygems/test_gem_commands_specification_command.rb +0 -251
  701. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  702. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -283
  703. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -209
  704. data/test/rubygems/test_gem_commands_update_command.rb +0 -514
  705. data/test/rubygems/test_gem_commands_which_command.rb +0 -87
  706. data/test/rubygems/test_gem_commands_yank_command.rb +0 -100
  707. data/test/rubygems/test_gem_config_file.rb +0 -491
  708. data/test/rubygems/test_gem_dependency.rb +0 -362
  709. data/test/rubygems/test_gem_dependency_installer.rb +0 -1235
  710. data/test/rubygems/test_gem_dependency_list.rb +0 -260
  711. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -29
  712. data/test/rubygems/test_gem_doctor.rb +0 -169
  713. data/test/rubygems/test_gem_ext_builder.rb +0 -341
  714. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -87
  715. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -87
  716. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -211
  717. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -65
  718. data/test/rubygems/test_gem_gem_runner.rb +0 -69
  719. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -235
  720. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -62
  721. data/test/rubygems/test_gem_indexer.rb +0 -367
  722. data/test/rubygems/test_gem_install_update_options.rb +0 -197
  723. data/test/rubygems/test_gem_installer.rb +0 -1552
  724. data/test/rubygems/test_gem_local_remote_options.rb +0 -134
  725. data/test/rubygems/test_gem_name_tuple.rb +0 -45
  726. data/test/rubygems/test_gem_package.rb +0 -876
  727. data/test/rubygems/test_gem_package_old.rb +0 -90
  728. data/test/rubygems/test_gem_package_tar_header.rb +0 -147
  729. data/test/rubygems/test_gem_package_tar_reader.rb +0 -90
  730. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -142
  731. data/test/rubygems/test_gem_package_tar_writer.rb +0 -264
  732. data/test/rubygems/test_gem_package_task.rb +0 -84
  733. data/test/rubygems/test_gem_path_support.rb +0 -121
  734. data/test/rubygems/test_gem_platform.rb +0 -308
  735. data/test/rubygems/test_gem_rdoc.rb +0 -270
  736. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1051
  737. data/test/rubygems/test_gem_request.rb +0 -363
  738. data/test/rubygems/test_gem_request_connection_pools.rb +0 -130
  739. data/test/rubygems/test_gem_request_set.rb +0 -595
  740. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -831
  741. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -470
  742. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -549
  743. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
  744. data/test/rubygems/test_gem_requirement.rb +0 -387
  745. data/test/rubygems/test_gem_resolver.rb +0 -715
  746. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -74
  747. data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
  748. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -145
  749. data/test/rubygems/test_gem_resolver_best_set.rb +0 -138
  750. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -46
  751. data/test/rubygems/test_gem_resolver_conflict.rb +0 -88
  752. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -85
  753. data/test/rubygems/test_gem_resolver_git_set.rb +0 -190
  754. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  755. data/test/rubygems/test_gem_resolver_index_set.rb +0 -90
  756. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -90
  757. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -50
  758. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -258
  759. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -46
  760. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -64
  761. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -100
  762. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -21
  763. data/test/rubygems/test_gem_resolver_specification.rb +0 -65
  764. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -84
  765. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -84
  766. data/test/rubygems/test_gem_security.rb +0 -307
  767. data/test/rubygems/test_gem_security_policy.rb +0 -541
  768. data/test/rubygems/test_gem_security_signer.rb +0 -209
  769. data/test/rubygems/test_gem_security_trust_dir.rb +0 -101
  770. data/test/rubygems/test_gem_server.rb +0 -409
  771. data/test/rubygems/test_gem_silent_ui.rb +0 -117
  772. data/test/rubygems/test_gem_source.rb +0 -242
  773. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -20
  774. data/test/rubygems/test_gem_source_git.rb +0 -309
  775. data/test/rubygems/test_gem_source_installed.rb +0 -37
  776. data/test/rubygems/test_gem_source_list.rb +0 -118
  777. data/test/rubygems/test_gem_source_local.rb +0 -107
  778. data/test/rubygems/test_gem_source_lock.rb +0 -115
  779. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  780. data/test/rubygems/test_gem_source_vendor.rb +0 -32
  781. data/test/rubygems/test_gem_spec_fetcher.rb +0 -311
  782. data/test/rubygems/test_gem_specification.rb +0 -3519
  783. data/test/rubygems/test_gem_stream_ui.rb +0 -239
  784. data/test/rubygems/test_gem_stub_specification.rb +0 -217
  785. data/test/rubygems/test_gem_text.rb +0 -77
  786. data/test/rubygems/test_gem_uninstaller.rb +0 -485
  787. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -33
  788. data/test/rubygems/test_gem_uri_formatter.rb +0 -29
  789. data/test/rubygems/test_gem_util.rb +0 -40
  790. data/test/rubygems/test_gem_validator.rb +0 -46
  791. data/test/rubygems/test_gem_version.rb +0 -222
  792. data/test/rubygems/test_gem_version_option.rb +0 -152
  793. data/test/rubygems/test_kernel.rb +0 -86
  794. data/test/rubygems/test_require.rb +0 -322
  795. data/test/rubygems/wrong_key_cert.pem +0 -18
  796. data/test/rubygems/wrong_key_cert_32.pem +0 -18
  797. data/util/CL2notes +0 -56
  798. data/util/create_certs.rb +0 -157
  799. data/util/create_encrypted_key.rb +0 -17
  800. data/util/generate_spdx_license_list.rb +0 -51
  801. data/util/update_bundled_ca_certificates.rb +0 -118
@@ -0,0 +1,1073 @@
1
+ require_relative '../../../../../vendored_net_http'
2
+ require_relative '../../../../uri/lib/uri'
3
+ require 'cgi' # for escaping
4
+ require_relative '../../../../connection_pool/lib/connection_pool'
5
+
6
+ autoload :OpenSSL, 'openssl'
7
+
8
+ ##
9
+ # Persistent connections for Gem::Net::HTTP
10
+ #
11
+ # Gem::Net::HTTP::Persistent maintains persistent connections across all the
12
+ # servers you wish to talk to. For each host:port you communicate with a
13
+ # single persistent connection is created.
14
+ #
15
+ # Connections will be shared across threads through a connection pool to
16
+ # increase reuse of connections.
17
+ #
18
+ # You can shut down any remaining HTTP connections when done by calling
19
+ # #shutdown.
20
+ #
21
+ # Example:
22
+ #
23
+ # require 'bundler/vendor/net-http/lib/net/http/persistent'
24
+ #
25
+ # uri = Bundler::URI 'http://example.com/awesome/web/service'
26
+ #
27
+ # http = Gem::Net::HTTP::Persistent.new
28
+ #
29
+ # # perform a GET
30
+ # response = http.request uri
31
+ #
32
+ # # or
33
+ #
34
+ # get = Gem::Net::HTTP::Get.new uri.request_uri
35
+ # response = http.request get
36
+ #
37
+ # # create a POST
38
+ # post_uri = uri + 'create'
39
+ # post = Gem::Net::HTTP::Post.new post_uri.path
40
+ # post.set_form_data 'some' => 'cool data'
41
+ #
42
+ # # perform the POST, the Bundler::URI is always required
43
+ # response http.request post_uri, post
44
+ #
45
+ # Note that for GET, HEAD and other requests that do not have a body you want
46
+ # to use Bundler::URI#request_uri not Bundler::URI#path. The request_uri contains the query
47
+ # params which are sent in the body for other requests.
48
+ #
49
+ # == TLS/SSL
50
+ #
51
+ # TLS connections are automatically created depending upon the scheme of the
52
+ # Bundler::URI. TLS connections are automatically verified against the default
53
+ # certificate store for your computer. You can override this by changing
54
+ # verify_mode or by specifying an alternate cert_store.
55
+ #
56
+ # Here are the TLS settings, see the individual methods for documentation:
57
+ #
58
+ # #certificate :: This client's certificate
59
+ # #ca_file :: The certificate-authorities
60
+ # #ca_path :: Directory with certificate-authorities
61
+ # #cert_store :: An SSL certificate store
62
+ # #ciphers :: List of SSl ciphers allowed
63
+ # #private_key :: The client's SSL private key
64
+ # #reuse_ssl_sessions :: Reuse a previously opened SSL session for a new
65
+ # connection
66
+ # #ssl_timeout :: Session lifetime
67
+ # #ssl_version :: Which specific SSL version to use
68
+ # #verify_callback :: For server certificate verification
69
+ # #verify_depth :: Depth of certificate verification
70
+ # #verify_mode :: How connections should be verified
71
+ #
72
+ # == Proxies
73
+ #
74
+ # A proxy can be set through #proxy= or at initialization time by providing a
75
+ # second argument to ::new. The proxy may be the Bundler::URI of the proxy server or
76
+ # <code>:ENV</code> which will consult environment variables.
77
+ #
78
+ # See #proxy= and #proxy_from_env for details.
79
+ #
80
+ # == Headers
81
+ #
82
+ # Headers may be specified for use in every request. #headers are appended to
83
+ # any headers on the request. #override_headers replace existing headers on
84
+ # the request.
85
+ #
86
+ # The difference between the two can be seen in setting the User-Agent. Using
87
+ # <code>http.headers['User-Agent'] = 'MyUserAgent'</code> will send "Ruby,
88
+ # MyUserAgent" while <code>http.override_headers['User-Agent'] =
89
+ # 'MyUserAgent'</code> will send "MyUserAgent".
90
+ #
91
+ # == Tuning
92
+ #
93
+ # === Segregation
94
+ #
95
+ # Each Gem::Net::HTTP::Persistent instance has its own pool of connections. There
96
+ # is no sharing with other instances (as was true in earlier versions).
97
+ #
98
+ # === Idle Timeout
99
+ #
100
+ # If a connection hasn't been used for this number of seconds it will
101
+ # automatically be reset upon the next use to avoid attempting to send to a
102
+ # closed connection. The default value is 5 seconds. nil means no timeout.
103
+ # Set through #idle_timeout.
104
+ #
105
+ # Reducing this value may help avoid the "too many connection resets" error
106
+ # when sending non-idempotent requests while increasing this value will cause
107
+ # fewer round-trips.
108
+ #
109
+ # === Read Timeout
110
+ #
111
+ # The amount of time allowed between reading two chunks from the socket. Set
112
+ # through #read_timeout
113
+ #
114
+ # === Max Requests
115
+ #
116
+ # The number of requests that should be made before opening a new connection.
117
+ # Typically many keep-alive capable servers tune this to 100 or less, so the
118
+ # 101st request will fail with ECONNRESET. If unset (default), this value has
119
+ # no effect, if set, connections will be reset on the request after
120
+ # max_requests.
121
+ #
122
+ # === Open Timeout
123
+ #
124
+ # The amount of time to wait for a connection to be opened. Set through
125
+ # #open_timeout.
126
+ #
127
+ # === Socket Options
128
+ #
129
+ # Socket options may be set on newly-created connections. See #socket_options
130
+ # for details.
131
+ #
132
+ # === Connection Termination
133
+ #
134
+ # If you are done using the Gem::Net::HTTP::Persistent instance you may shut down
135
+ # all the connections in the current thread with #shutdown. This is not
136
+ # recommended for normal use, it should only be used when it will be several
137
+ # minutes before you make another HTTP request.
138
+ #
139
+ # If you are using multiple threads, call #shutdown in each thread when the
140
+ # thread is done making requests. If you don't call shutdown, that's OK.
141
+ # Ruby will automatically garbage collect and shutdown your HTTP connections
142
+ # when the thread terminates.
143
+
144
+ class Gem::Net::HTTP::Persistent
145
+
146
+ ##
147
+ # The beginning of Time
148
+
149
+ EPOCH = Time.at 0 # :nodoc:
150
+
151
+ ##
152
+ # Is OpenSSL available? This test works with autoload
153
+
154
+ HAVE_OPENSSL = defined? OpenSSL::SSL # :nodoc:
155
+
156
+ ##
157
+ # The default connection pool size is 1/4 the allowed open files
158
+ # (<code>ulimit -n</code>) or 256 if your OS does not support file handle
159
+ # limits (typically windows).
160
+
161
+ if Process.const_defined? :RLIMIT_NOFILE
162
+ open_file_limits = Process.getrlimit(Process::RLIMIT_NOFILE)
163
+
164
+ # Under JRuby on Windows Process responds to `getrlimit` but returns something that does not match docs
165
+ if open_file_limits.respond_to?(:first)
166
+ DEFAULT_POOL_SIZE = open_file_limits.first / 4
167
+ else
168
+ DEFAULT_POOL_SIZE = 256
169
+ end
170
+ else
171
+ DEFAULT_POOL_SIZE = 256
172
+ end
173
+
174
+ ##
175
+ # The version of Gem::Net::HTTP::Persistent you are using
176
+
177
+ VERSION = '4.0.2'
178
+
179
+ ##
180
+ # Error class for errors raised by Gem::Net::HTTP::Persistent. Various
181
+ # SystemCallErrors are re-raised with a human-readable message under this
182
+ # class.
183
+
184
+ class Error < StandardError; end
185
+
186
+ ##
187
+ # Use this method to detect the idle timeout of the host at +uri+. The
188
+ # value returned can be used to configure #idle_timeout. +max+ controls the
189
+ # maximum idle timeout to detect.
190
+ #
191
+ # After
192
+ #
193
+ # Idle timeout detection is performed by creating a connection then
194
+ # performing a HEAD request in a loop until the connection terminates
195
+ # waiting one additional second per loop.
196
+ #
197
+ # NOTE: This may not work on ruby > 1.9.
198
+
199
+ def self.detect_idle_timeout uri, max = 10
200
+ uri = Bundler::URI uri unless Bundler::URI::Generic === uri
201
+ uri += '/'
202
+
203
+ req = Gem::Net::HTTP::Head.new uri.request_uri
204
+
205
+ http = new 'net-http-persistent detect_idle_timeout'
206
+
207
+ http.connection_for uri do |connection|
208
+ sleep_time = 0
209
+
210
+ http = connection.http
211
+
212
+ loop do
213
+ response = http.request req
214
+
215
+ $stderr.puts "HEAD #{uri} => #{response.code}" if $DEBUG
216
+
217
+ unless Gem::Net::HTTPOK === response then
218
+ raise Error, "bad response code #{response.code} detecting idle timeout"
219
+ end
220
+
221
+ break if sleep_time >= max
222
+
223
+ sleep_time += 1
224
+
225
+ $stderr.puts "sleeping #{sleep_time}" if $DEBUG
226
+ sleep sleep_time
227
+ end
228
+ end
229
+ rescue
230
+ # ignore StandardErrors, we've probably found the idle timeout.
231
+ ensure
232
+ return sleep_time unless $!
233
+ end
234
+
235
+ ##
236
+ # This client's OpenSSL::X509::Certificate
237
+
238
+ attr_reader :certificate
239
+
240
+ ##
241
+ # For Gem::Net::HTTP parity
242
+
243
+ alias cert certificate
244
+
245
+ ##
246
+ # An SSL certificate authority. Setting this will set verify_mode to
247
+ # VERIFY_PEER.
248
+
249
+ attr_reader :ca_file
250
+
251
+ ##
252
+ # A directory of SSL certificates to be used as certificate authorities.
253
+ # Setting this will set verify_mode to VERIFY_PEER.
254
+
255
+ attr_reader :ca_path
256
+
257
+ ##
258
+ # An SSL certificate store. Setting this will override the default
259
+ # certificate store. See verify_mode for more information.
260
+
261
+ attr_reader :cert_store
262
+
263
+ ##
264
+ # The ciphers allowed for SSL connections
265
+
266
+ attr_reader :ciphers
267
+
268
+ ##
269
+ # Sends debug_output to this IO via Gem::Net::HTTP#set_debug_output.
270
+ #
271
+ # Never use this method in production code, it causes a serious security
272
+ # hole.
273
+
274
+ attr_accessor :debug_output
275
+
276
+ ##
277
+ # Current connection generation
278
+
279
+ attr_reader :generation # :nodoc:
280
+
281
+ ##
282
+ # Headers that are added to every request using Gem::Net::HTTP#add_field
283
+
284
+ attr_reader :headers
285
+
286
+ ##
287
+ # Maps host:port to an HTTP version. This allows us to enable version
288
+ # specific features.
289
+
290
+ attr_reader :http_versions
291
+
292
+ ##
293
+ # Maximum time an unused connection can remain idle before being
294
+ # automatically closed.
295
+
296
+ attr_accessor :idle_timeout
297
+
298
+ ##
299
+ # Maximum number of requests on a connection before it is considered expired
300
+ # and automatically closed.
301
+
302
+ attr_accessor :max_requests
303
+
304
+ ##
305
+ # Number of retries to perform if a request fails.
306
+ #
307
+ # See also #max_retries=, Gem::Net::HTTP#max_retries=.
308
+
309
+ attr_reader :max_retries
310
+
311
+ ##
312
+ # The value sent in the Keep-Alive header. Defaults to 30. Not needed for
313
+ # HTTP/1.1 servers.
314
+ #
315
+ # This may not work correctly for HTTP/1.0 servers
316
+ #
317
+ # This method may be removed in a future version as RFC 2616 does not
318
+ # require this header.
319
+
320
+ attr_accessor :keep_alive
321
+
322
+ ##
323
+ # The name for this collection of persistent connections.
324
+
325
+ attr_reader :name
326
+
327
+ ##
328
+ # Seconds to wait until a connection is opened. See Gem::Net::HTTP#open_timeout
329
+
330
+ attr_accessor :open_timeout
331
+
332
+ ##
333
+ # Headers that are added to every request using Gem::Net::HTTP#[]=
334
+
335
+ attr_reader :override_headers
336
+
337
+ ##
338
+ # This client's SSL private key
339
+
340
+ attr_reader :private_key
341
+
342
+ ##
343
+ # For Gem::Net::HTTP parity
344
+
345
+ alias key private_key
346
+
347
+ ##
348
+ # The URL through which requests will be proxied
349
+
350
+ attr_reader :proxy_uri
351
+
352
+ ##
353
+ # List of host suffixes which will not be proxied
354
+
355
+ attr_reader :no_proxy
356
+
357
+ ##
358
+ # Test-only accessor for the connection pool
359
+
360
+ attr_reader :pool # :nodoc:
361
+
362
+ ##
363
+ # Seconds to wait until reading one block. See Gem::Net::HTTP#read_timeout
364
+
365
+ attr_accessor :read_timeout
366
+
367
+ ##
368
+ # Seconds to wait until writing one block. See Gem::Net::HTTP#write_timeout
369
+
370
+ attr_accessor :write_timeout
371
+
372
+ ##
373
+ # By default SSL sessions are reused to avoid extra SSL handshakes. Set
374
+ # this to false if you have problems communicating with an HTTPS server
375
+ # like:
376
+ #
377
+ # SSL_connect [...] read finished A: unexpected message (OpenSSL::SSL::SSLError)
378
+
379
+ attr_accessor :reuse_ssl_sessions
380
+
381
+ ##
382
+ # An array of options for Socket#setsockopt.
383
+ #
384
+ # By default the TCP_NODELAY option is set on sockets.
385
+ #
386
+ # To set additional options append them to this array:
387
+ #
388
+ # http.socket_options << [Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1]
389
+
390
+ attr_reader :socket_options
391
+
392
+ ##
393
+ # Current SSL connection generation
394
+
395
+ attr_reader :ssl_generation # :nodoc:
396
+
397
+ ##
398
+ # SSL session lifetime
399
+
400
+ attr_reader :ssl_timeout
401
+
402
+ ##
403
+ # SSL version to use.
404
+ #
405
+ # By default, the version will be negotiated automatically between client
406
+ # and server. Ruby 1.9 and newer only. Deprecated since Ruby 2.5.
407
+
408
+ attr_reader :ssl_version
409
+
410
+ ##
411
+ # Minimum SSL version to use, e.g. :TLS1_1
412
+ #
413
+ # By default, the version will be negotiated automatically between client
414
+ # and server. Ruby 2.5 and newer only.
415
+
416
+ attr_reader :min_version
417
+
418
+ ##
419
+ # Maximum SSL version to use, e.g. :TLS1_2
420
+ #
421
+ # By default, the version will be negotiated automatically between client
422
+ # and server. Ruby 2.5 and newer only.
423
+
424
+ attr_reader :max_version
425
+
426
+ ##
427
+ # Where this instance's last-use times live in the thread local variables
428
+
429
+ attr_reader :timeout_key # :nodoc:
430
+
431
+ ##
432
+ # SSL verification callback. Used when ca_file or ca_path is set.
433
+
434
+ attr_reader :verify_callback
435
+
436
+ ##
437
+ # Sets the depth of SSL certificate verification
438
+
439
+ attr_reader :verify_depth
440
+
441
+ ##
442
+ # HTTPS verify mode. Defaults to OpenSSL::SSL::VERIFY_PEER which verifies
443
+ # the server certificate.
444
+ #
445
+ # If no ca_file, ca_path or cert_store is set the default system certificate
446
+ # store is used.
447
+ #
448
+ # You can use +verify_mode+ to override any default values.
449
+
450
+ attr_reader :verify_mode
451
+
452
+ ##
453
+ # Creates a new Gem::Net::HTTP::Persistent.
454
+ #
455
+ # Set a +name+ for fun. Your library name should be good enough, but this
456
+ # otherwise has no purpose.
457
+ #
458
+ # +proxy+ may be set to a Bundler::URI::HTTP or :ENV to pick up proxy options from
459
+ # the environment. See proxy_from_env for details.
460
+ #
461
+ # In order to use a Bundler::URI for the proxy you may need to do some extra work
462
+ # beyond Bundler::URI parsing if the proxy requires a password:
463
+ #
464
+ # proxy = Bundler::URI 'http://proxy.example'
465
+ # proxy.user = 'AzureDiamond'
466
+ # proxy.password = 'hunter2'
467
+ #
468
+ # Set +pool_size+ to limit the maximum number of connections allowed.
469
+ # Defaults to 1/4 the number of allowed file handles or 256 if your OS does
470
+ # not support a limit on allowed file handles. You can have no more than
471
+ # this many threads with active HTTP transactions.
472
+
473
+ def initialize name: nil, proxy: nil, pool_size: DEFAULT_POOL_SIZE
474
+ @name = name
475
+
476
+ @debug_output = nil
477
+ @proxy_uri = nil
478
+ @no_proxy = []
479
+ @headers = {}
480
+ @override_headers = {}
481
+ @http_versions = {}
482
+ @keep_alive = 30
483
+ @open_timeout = nil
484
+ @read_timeout = nil
485
+ @write_timeout = nil
486
+ @idle_timeout = 5
487
+ @max_requests = nil
488
+ @max_retries = 1
489
+ @socket_options = []
490
+ @ssl_generation = 0 # incremented when SSL session variables change
491
+
492
+ @socket_options << [Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1] if
493
+ Socket.const_defined? :TCP_NODELAY
494
+
495
+ @pool = Gem::Net::HTTP::Persistent::Pool.new size: pool_size do |http_args|
496
+ Gem::Net::HTTP::Persistent::Connection.new Gem::Net::HTTP, http_args, @ssl_generation
497
+ end
498
+
499
+ @certificate = nil
500
+ @ca_file = nil
501
+ @ca_path = nil
502
+ @ciphers = nil
503
+ @private_key = nil
504
+ @ssl_timeout = nil
505
+ @ssl_version = nil
506
+ @min_version = nil
507
+ @max_version = nil
508
+ @verify_callback = nil
509
+ @verify_depth = nil
510
+ @verify_mode = nil
511
+ @cert_store = nil
512
+
513
+ @generation = 0 # incremented when proxy Bundler::URI changes
514
+
515
+ if HAVE_OPENSSL then
516
+ @verify_mode = OpenSSL::SSL::VERIFY_PEER
517
+ @reuse_ssl_sessions = OpenSSL::SSL.const_defined? :Session
518
+ end
519
+
520
+ self.proxy = proxy if proxy
521
+ end
522
+
523
+ ##
524
+ # Sets this client's OpenSSL::X509::Certificate
525
+
526
+ def certificate= certificate
527
+ @certificate = certificate
528
+
529
+ reconnect_ssl
530
+ end
531
+
532
+ # For Gem::Net::HTTP parity
533
+ alias cert= certificate=
534
+
535
+ ##
536
+ # Sets the SSL certificate authority file.
537
+
538
+ def ca_file= file
539
+ @ca_file = file
540
+
541
+ reconnect_ssl
542
+ end
543
+
544
+ ##
545
+ # Sets the SSL certificate authority path.
546
+
547
+ def ca_path= path
548
+ @ca_path = path
549
+
550
+ reconnect_ssl
551
+ end
552
+
553
+ ##
554
+ # Overrides the default SSL certificate store used for verifying
555
+ # connections.
556
+
557
+ def cert_store= store
558
+ @cert_store = store
559
+
560
+ reconnect_ssl
561
+ end
562
+
563
+ ##
564
+ # The ciphers allowed for SSL connections
565
+
566
+ def ciphers= ciphers
567
+ @ciphers = ciphers
568
+
569
+ reconnect_ssl
570
+ end
571
+
572
+ ##
573
+ # Creates a new connection for +uri+
574
+
575
+ def connection_for uri
576
+ use_ssl = uri.scheme.downcase == 'https'
577
+
578
+ net_http_args = [uri.hostname, uri.port]
579
+
580
+ # I'm unsure if uri.host or uri.hostname should be checked against
581
+ # the proxy bypass list.
582
+ if @proxy_uri and not proxy_bypass? uri.host, uri.port then
583
+ net_http_args.concat @proxy_args
584
+ else
585
+ net_http_args.concat [nil, nil, nil, nil]
586
+ end
587
+
588
+ connection = @pool.checkout net_http_args
589
+
590
+ http = connection.http
591
+
592
+ connection.ressl @ssl_generation if
593
+ connection.ssl_generation != @ssl_generation
594
+
595
+ if not http.started? then
596
+ ssl http if use_ssl
597
+ start http
598
+ elsif expired? connection then
599
+ reset connection
600
+ end
601
+
602
+ http.keep_alive_timeout = @idle_timeout if @idle_timeout
603
+ http.max_retries = @max_retries if http.respond_to?(:max_retries=)
604
+ http.read_timeout = @read_timeout if @read_timeout
605
+ http.write_timeout = @write_timeout if
606
+ @write_timeout && http.respond_to?(:write_timeout=)
607
+
608
+ return yield connection
609
+ rescue Errno::ECONNREFUSED
610
+ address = http.proxy_address || http.address
611
+ port = http.proxy_port || http.port
612
+
613
+ raise Error, "connection refused: #{address}:#{port}"
614
+ rescue Errno::EHOSTDOWN
615
+ address = http.proxy_address || http.address
616
+ port = http.proxy_port || http.port
617
+
618
+ raise Error, "host down: #{address}:#{port}"
619
+ ensure
620
+ @pool.checkin net_http_args
621
+ end
622
+
623
+ ##
624
+ # CGI::escape wrapper
625
+
626
+ def escape str
627
+ CGI.escape str if str
628
+ end
629
+
630
+ ##
631
+ # CGI::unescape wrapper
632
+
633
+ def unescape str
634
+ CGI.unescape str if str
635
+ end
636
+
637
+
638
+ ##
639
+ # Returns true if the connection should be reset due to an idle timeout, or
640
+ # maximum request count, false otherwise.
641
+
642
+ def expired? connection
643
+ return true if @max_requests && connection.requests >= @max_requests
644
+ return false unless @idle_timeout
645
+ return true if @idle_timeout.zero?
646
+
647
+ Time.now - connection.last_use > @idle_timeout
648
+ end
649
+
650
+ ##
651
+ # Starts the Gem::Net::HTTP +connection+
652
+
653
+ def start http
654
+ http.set_debug_output @debug_output if @debug_output
655
+ http.open_timeout = @open_timeout if @open_timeout
656
+
657
+ http.start
658
+
659
+ socket = http.instance_variable_get :@socket
660
+
661
+ if socket then # for fakeweb
662
+ @socket_options.each do |option|
663
+ socket.io.setsockopt(*option)
664
+ end
665
+ end
666
+ end
667
+
668
+ ##
669
+ # Finishes the Gem::Net::HTTP +connection+
670
+
671
+ def finish connection
672
+ connection.finish
673
+
674
+ connection.http.instance_variable_set :@last_communicated, nil
675
+ connection.http.instance_variable_set :@ssl_session, nil unless
676
+ @reuse_ssl_sessions
677
+ end
678
+
679
+ ##
680
+ # Returns the HTTP protocol version for +uri+
681
+
682
+ def http_version uri
683
+ @http_versions["#{uri.hostname}:#{uri.port}"]
684
+ end
685
+
686
+ ##
687
+ # Adds "http://" to the String +uri+ if it is missing.
688
+
689
+ def normalize_uri uri
690
+ (uri =~ /^https?:/) ? uri : "http://#{uri}"
691
+ end
692
+
693
+ ##
694
+ # Set the maximum number of retries for a request.
695
+ #
696
+ # Defaults to one retry.
697
+ #
698
+ # Set this to 0 to disable retries.
699
+
700
+ def max_retries= retries
701
+ retries = retries.to_int
702
+
703
+ raise ArgumentError, "max_retries must be positive" if retries < 0
704
+
705
+ @max_retries = retries
706
+
707
+ reconnect
708
+ end
709
+
710
+ ##
711
+ # Sets this client's SSL private key
712
+
713
+ def private_key= key
714
+ @private_key = key
715
+
716
+ reconnect_ssl
717
+ end
718
+
719
+ # For Gem::Net::HTTP parity
720
+ alias key= private_key=
721
+
722
+ ##
723
+ # Sets the proxy server. The +proxy+ may be the Bundler::URI of the proxy server,
724
+ # the symbol +:ENV+ which will read the proxy from the environment or nil to
725
+ # disable use of a proxy. See #proxy_from_env for details on setting the
726
+ # proxy from the environment.
727
+ #
728
+ # If the proxy Bundler::URI is set after requests have been made, the next request
729
+ # will shut-down and re-open all connections.
730
+ #
731
+ # The +no_proxy+ query parameter can be used to specify hosts which shouldn't
732
+ # be reached via proxy; if set it should be a comma separated list of
733
+ # hostname suffixes, optionally with +:port+ appended, for example
734
+ # <tt>example.com,some.host:8080</tt>.
735
+
736
+ def proxy= proxy
737
+ @proxy_uri = case proxy
738
+ when :ENV then proxy_from_env
739
+ when Bundler::URI::HTTP then proxy
740
+ when nil then # ignore
741
+ else raise ArgumentError, 'proxy must be :ENV or a Bundler::URI::HTTP'
742
+ end
743
+
744
+ @no_proxy.clear
745
+
746
+ if @proxy_uri then
747
+ @proxy_args = [
748
+ @proxy_uri.hostname,
749
+ @proxy_uri.port,
750
+ unescape(@proxy_uri.user),
751
+ unescape(@proxy_uri.password),
752
+ ]
753
+
754
+ @proxy_connection_id = [nil, *@proxy_args].join ':'
755
+
756
+ if @proxy_uri.query then
757
+ @no_proxy = CGI.parse(@proxy_uri.query)['no_proxy'].join(',').downcase.split(',').map { |x| x.strip }.reject { |x| x.empty? }
758
+ end
759
+ end
760
+
761
+ reconnect
762
+ reconnect_ssl
763
+ end
764
+
765
+ ##
766
+ # Creates a Bundler::URI for an HTTP proxy server from ENV variables.
767
+ #
768
+ # If +HTTP_PROXY+ is set a proxy will be returned.
769
+ #
770
+ # If +HTTP_PROXY_USER+ or +HTTP_PROXY_PASS+ are set the Bundler::URI is given the
771
+ # indicated user and password unless HTTP_PROXY contains either of these in
772
+ # the Bundler::URI.
773
+ #
774
+ # The +NO_PROXY+ ENV variable can be used to specify hosts which shouldn't
775
+ # be reached via proxy; if set it should be a comma separated list of
776
+ # hostname suffixes, optionally with +:port+ appended, for example
777
+ # <tt>example.com,some.host:8080</tt>. When set to <tt>*</tt> no proxy will
778
+ # be returned.
779
+ #
780
+ # For Windows users, lowercase ENV variables are preferred over uppercase ENV
781
+ # variables.
782
+
783
+ def proxy_from_env
784
+ env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
785
+
786
+ return nil if env_proxy.nil? or env_proxy.empty?
787
+
788
+ uri = Bundler::URI normalize_uri env_proxy
789
+
790
+ env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
791
+
792
+ # '*' is special case for always bypass
793
+ return nil if env_no_proxy == '*'
794
+
795
+ if env_no_proxy then
796
+ uri.query = "no_proxy=#{escape(env_no_proxy)}"
797
+ end
798
+
799
+ unless uri.user or uri.password then
800
+ uri.user = escape ENV['http_proxy_user'] || ENV['HTTP_PROXY_USER']
801
+ uri.password = escape ENV['http_proxy_pass'] || ENV['HTTP_PROXY_PASS']
802
+ end
803
+
804
+ uri
805
+ end
806
+
807
+ ##
808
+ # Returns true when proxy should by bypassed for host.
809
+
810
+ def proxy_bypass? host, port
811
+ host = host.downcase
812
+ host_port = [host, port].join ':'
813
+
814
+ @no_proxy.each do |name|
815
+ return true if host[-name.length, name.length] == name or
816
+ host_port[-name.length, name.length] == name
817
+ end
818
+
819
+ false
820
+ end
821
+
822
+ ##
823
+ # Forces reconnection of all HTTP connections, including TLS/SSL
824
+ # connections.
825
+
826
+ def reconnect
827
+ @generation += 1
828
+ end
829
+
830
+ ##
831
+ # Forces reconnection of only TLS/SSL connections.
832
+
833
+ def reconnect_ssl
834
+ @ssl_generation += 1
835
+ end
836
+
837
+ ##
838
+ # Finishes then restarts the Gem::Net::HTTP +connection+
839
+
840
+ def reset connection
841
+ http = connection.http
842
+
843
+ finish connection
844
+
845
+ start http
846
+ rescue Errno::ECONNREFUSED
847
+ e = Error.new "connection refused: #{http.address}:#{http.port}"
848
+ e.set_backtrace $@
849
+ raise e
850
+ rescue Errno::EHOSTDOWN
851
+ e = Error.new "host down: #{http.address}:#{http.port}"
852
+ e.set_backtrace $@
853
+ raise e
854
+ end
855
+
856
+ ##
857
+ # Makes a request on +uri+. If +req+ is nil a Gem::Net::HTTP::Get is performed
858
+ # against +uri+.
859
+ #
860
+ # If a block is passed #request behaves like Gem::Net::HTTP#request (the body of
861
+ # the response will not have been read).
862
+ #
863
+ # +req+ must be a Gem::Net::HTTPGenericRequest subclass (see Gem::Net::HTTP for a list).
864
+
865
+ def request uri, req = nil, &block
866
+ uri = Bundler::URI uri
867
+ req = request_setup req || uri
868
+ response = nil
869
+
870
+ connection_for uri do |connection|
871
+ http = connection.http
872
+
873
+ begin
874
+ connection.requests += 1
875
+
876
+ response = http.request req, &block
877
+
878
+ if req.connection_close? or
879
+ (response.http_version <= '1.0' and
880
+ not response.connection_keep_alive?) or
881
+ response.connection_close? then
882
+ finish connection
883
+ end
884
+ rescue Exception # make sure to close the connection when it was interrupted
885
+ finish connection
886
+
887
+ raise
888
+ ensure
889
+ connection.last_use = Time.now
890
+ end
891
+ end
892
+
893
+ @http_versions["#{uri.hostname}:#{uri.port}"] ||= response.http_version
894
+
895
+ response
896
+ end
897
+
898
+ ##
899
+ # Creates a GET request if +req_or_uri+ is a Bundler::URI and adds headers to the
900
+ # request.
901
+ #
902
+ # Returns the request.
903
+
904
+ def request_setup req_or_uri # :nodoc:
905
+ req = if req_or_uri.respond_to? 'request_uri' then
906
+ Gem::Net::HTTP::Get.new req_or_uri.request_uri
907
+ else
908
+ req_or_uri
909
+ end
910
+
911
+ @headers.each do |pair|
912
+ req.add_field(*pair)
913
+ end
914
+
915
+ @override_headers.each do |name, value|
916
+ req[name] = value
917
+ end
918
+
919
+ unless req['Connection'] then
920
+ req.add_field 'Connection', 'keep-alive'
921
+ req.add_field 'Keep-Alive', @keep_alive
922
+ end
923
+
924
+ req
925
+ end
926
+
927
+ ##
928
+ # Shuts down all connections
929
+ #
930
+ # *NOTE*: Calling shutdown for can be dangerous!
931
+ #
932
+ # If any thread is still using a connection it may cause an error! Call
933
+ # #shutdown when you are completely done making requests!
934
+
935
+ def shutdown
936
+ @pool.shutdown { |http| http.finish }
937
+ end
938
+
939
+ ##
940
+ # Enables SSL on +connection+
941
+
942
+ def ssl connection
943
+ connection.use_ssl = true
944
+
945
+ connection.ciphers = @ciphers if @ciphers
946
+ connection.ssl_timeout = @ssl_timeout if @ssl_timeout
947
+ connection.ssl_version = @ssl_version if @ssl_version
948
+ connection.min_version = @min_version if @min_version
949
+ connection.max_version = @max_version if @max_version
950
+
951
+ connection.verify_depth = @verify_depth
952
+ connection.verify_mode = @verify_mode
953
+
954
+ if OpenSSL::SSL::VERIFY_PEER == OpenSSL::SSL::VERIFY_NONE and
955
+ not Object.const_defined?(:I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG) then
956
+ warn <<-WARNING
957
+ !!!SECURITY WARNING!!!
958
+
959
+ The SSL HTTP connection to:
960
+
961
+ #{connection.address}:#{connection.port}
962
+
963
+ !!!MAY NOT BE VERIFIED!!!
964
+
965
+ On your platform your OpenSSL implementation is broken.
966
+
967
+ There is no difference between the values of VERIFY_NONE and VERIFY_PEER.
968
+
969
+ This means that attempting to verify the security of SSL connections may not
970
+ work. This exposes you to man-in-the-middle exploits, snooping on the
971
+ contents of your connection and other dangers to the security of your data.
972
+
973
+ To disable this warning define the following constant at top-level in your
974
+ application:
975
+
976
+ I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG = nil
977
+
978
+ WARNING
979
+ end
980
+
981
+ connection.ca_file = @ca_file if @ca_file
982
+ connection.ca_path = @ca_path if @ca_path
983
+
984
+ if @ca_file or @ca_path then
985
+ connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
986
+ connection.verify_callback = @verify_callback if @verify_callback
987
+ end
988
+
989
+ if @certificate and @private_key then
990
+ connection.cert = @certificate
991
+ connection.key = @private_key
992
+ end
993
+
994
+ connection.cert_store = if @cert_store then
995
+ @cert_store
996
+ else
997
+ store = OpenSSL::X509::Store.new
998
+ store.set_default_paths
999
+ store
1000
+ end
1001
+ end
1002
+
1003
+ ##
1004
+ # SSL session lifetime
1005
+
1006
+ def ssl_timeout= ssl_timeout
1007
+ @ssl_timeout = ssl_timeout
1008
+
1009
+ reconnect_ssl
1010
+ end
1011
+
1012
+ ##
1013
+ # SSL version to use
1014
+
1015
+ def ssl_version= ssl_version
1016
+ @ssl_version = ssl_version
1017
+
1018
+ reconnect_ssl
1019
+ end
1020
+
1021
+ ##
1022
+ # Minimum SSL version to use
1023
+
1024
+ def min_version= min_version
1025
+ @min_version = min_version
1026
+
1027
+ reconnect_ssl
1028
+ end
1029
+
1030
+ ##
1031
+ # maximum SSL version to use
1032
+
1033
+ def max_version= max_version
1034
+ @max_version = max_version
1035
+
1036
+ reconnect_ssl
1037
+ end
1038
+
1039
+ ##
1040
+ # Sets the depth of SSL certificate verification
1041
+
1042
+ def verify_depth= verify_depth
1043
+ @verify_depth = verify_depth
1044
+
1045
+ reconnect_ssl
1046
+ end
1047
+
1048
+ ##
1049
+ # Sets the HTTPS verify mode. Defaults to OpenSSL::SSL::VERIFY_PEER.
1050
+ #
1051
+ # Setting this to VERIFY_NONE is a VERY BAD IDEA and should NEVER be used.
1052
+ # Securely transfer the correct certificate and update the default
1053
+ # certificate store or set the ca file instead.
1054
+
1055
+ def verify_mode= verify_mode
1056
+ @verify_mode = verify_mode
1057
+
1058
+ reconnect_ssl
1059
+ end
1060
+
1061
+ ##
1062
+ # SSL verification callback.
1063
+
1064
+ def verify_callback= callback
1065
+ @verify_callback = callback
1066
+
1067
+ reconnect_ssl
1068
+ end
1069
+ end
1070
+
1071
+ require_relative 'persistent/connection'
1072
+ require_relative 'persistent/pool'
1073
+