rubygems-update 3.3.18 → 3.4.19

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 (615) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1429 -1064
  3. data/CONTRIBUTING.md +31 -8
  4. data/Manifest.txt +61 -36
  5. data/POLICIES.md +55 -20
  6. data/README.md +19 -6
  7. data/bundler/CHANGELOG.md +457 -1
  8. data/bundler/README.md +3 -6
  9. data/bundler/UPGRADING.md +11 -4
  10. data/bundler/bundler.gemspec +8 -10
  11. data/bundler/exe/bundle +5 -16
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/add.rb +1 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +2 -0
  17. data/bundler/lib/bundler/cli/console.rb +2 -2
  18. data/bundler/lib/bundler/cli/doctor.rb +4 -6
  19. data/bundler/lib/bundler/cli/gem.rb +62 -40
  20. data/bundler/lib/bundler/cli/info.rb +1 -1
  21. data/bundler/lib/bundler/cli/init.rb +6 -2
  22. data/bundler/lib/bundler/cli/install.rb +8 -6
  23. data/bundler/lib/bundler/cli/lock.rb +8 -5
  24. data/bundler/lib/bundler/cli/open.rb +6 -4
  25. data/bundler/lib/bundler/cli/outdated.rb +14 -7
  26. data/bundler/lib/bundler/cli/platform.rb +7 -5
  27. data/bundler/lib/bundler/cli/viz.rb +1 -1
  28. data/bundler/lib/bundler/cli.rb +53 -7
  29. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  30. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  31. data/bundler/lib/bundler/constants.rb +1 -1
  32. data/bundler/lib/bundler/current_ruby.rb +16 -5
  33. data/bundler/lib/bundler/definition.rb +262 -133
  34. data/bundler/lib/bundler/dependency.rb +20 -86
  35. data/bundler/lib/bundler/digest.rb +1 -1
  36. data/bundler/lib/bundler/dsl.rb +6 -7
  37. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  38. data/bundler/lib/bundler/env.rb +2 -2
  39. data/bundler/lib/bundler/environment_preserver.rb +3 -2
  40. data/bundler/lib/bundler/errors.rb +1 -11
  41. data/bundler/lib/bundler/feature_flag.rb +0 -2
  42. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
  43. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  44. data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
  45. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  46. data/bundler/lib/bundler/fetcher.rb +21 -15
  47. data/bundler/lib/bundler/force_platform.rb +18 -0
  48. data/bundler/lib/bundler/friendly_errors.rb +1 -4
  49. data/bundler/lib/bundler/gem_helper.rb +3 -4
  50. data/bundler/lib/bundler/gem_helpers.rb +7 -2
  51. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  52. data/bundler/lib/bundler/graph.rb +3 -3
  53. data/bundler/lib/bundler/index.rb +13 -47
  54. data/bundler/lib/bundler/injector.rb +5 -4
  55. data/bundler/lib/bundler/inline.rb +9 -11
  56. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
  57. data/bundler/lib/bundler/installer/standalone.rb +13 -9
  58. data/bundler/lib/bundler/installer.rb +17 -29
  59. data/bundler/lib/bundler/lazy_specification.rb +54 -53
  60. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  61. data/bundler/lib/bundler/lockfile_parser.rb +17 -16
  62. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  63. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  64. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
  66. data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
  67. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  69. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  70. data/bundler/lib/bundler/man/bundle-config.1 +26 -10
  71. data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
  72. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  73. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  74. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  76. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  77. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  78. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  79. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  80. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  81. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  82. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  83. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  84. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  85. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  86. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  87. data/bundler/lib/bundler/man/bundle-install.1 +5 -30
  88. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
  89. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  90. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  91. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  92. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  94. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  95. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  96. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  97. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  98. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  99. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  102. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  103. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  104. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  105. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  106. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  107. data/bundler/lib/bundler/man/bundle.1 +15 -10
  108. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  109. data/bundler/lib/bundler/man/gemfile.5 +55 -55
  110. data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
  111. data/bundler/lib/bundler/man/index.txt +4 -0
  112. data/bundler/lib/bundler/match_metadata.rb +13 -0
  113. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  114. data/bundler/lib/bundler/mirror.rb +5 -7
  115. data/bundler/lib/bundler/plugin/index.rb +5 -5
  116. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  117. data/bundler/lib/bundler/plugin/installer.rb +5 -2
  118. data/bundler/lib/bundler/plugin.rb +3 -1
  119. data/bundler/lib/bundler/remote_specification.rb +7 -12
  120. data/bundler/lib/bundler/resolver/base.rb +107 -0
  121. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  122. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  123. data/bundler/lib/bundler/resolver/package.rb +72 -0
  124. data/bundler/lib/bundler/resolver/root.rb +25 -0
  125. data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
  126. data/bundler/lib/bundler/resolver.rb +335 -328
  127. data/bundler/lib/bundler/ruby_dsl.rb +7 -1
  128. data/bundler/lib/bundler/ruby_version.rb +8 -8
  129. data/bundler/lib/bundler/rubygems_ext.rb +100 -9
  130. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
  131. data/bundler/lib/bundler/rubygems_integration.rb +11 -15
  132. data/bundler/lib/bundler/runtime.rb +2 -6
  133. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  134. data/bundler/lib/bundler/settings.rb +5 -11
  135. data/bundler/lib/bundler/setup.rb +4 -1
  136. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  137. data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
  138. data/bundler/lib/bundler/source/git.rb +55 -30
  139. data/bundler/lib/bundler/source/metadata.rb +1 -2
  140. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  141. data/bundler/lib/bundler/source/path.rb +6 -6
  142. data/bundler/lib/bundler/source/rubygems.rb +26 -81
  143. data/bundler/lib/bundler/source.rb +1 -1
  144. data/bundler/lib/bundler/source_list.rb +8 -2
  145. data/bundler/lib/bundler/spec_set.rb +60 -37
  146. data/bundler/lib/bundler/templates/Executable +1 -1
  147. data/bundler/lib/bundler/templates/Executable.bundler +5 -10
  148. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  149. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  150. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  151. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  152. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  153. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  154. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  155. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  156. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  157. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  158. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  159. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  160. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  161. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  162. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  163. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
  164. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  165. data/bundler/lib/bundler/ui/shell.rb +35 -12
  166. data/bundler/lib/bundler/ui/silent.rb +21 -5
  167. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  168. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  169. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  170. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  171. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
  172. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  173. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  174. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  175. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  176. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  177. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  178. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  184. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  185. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  186. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  187. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  188. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  189. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  190. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  192. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  193. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  194. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  195. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  196. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  197. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  207. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  208. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  209. data/bundler/lib/bundler/version.rb +5 -1
  210. data/bundler/lib/bundler/worker.rb +5 -7
  211. data/bundler/lib/bundler.rb +25 -77
  212. data/{bin → exe}/gem +4 -5
  213. data/{bin → exe}/update_rubygems +12 -10
  214. data/lib/rubygems/available_set.rb +4 -3
  215. data/lib/rubygems/basic_specification.rb +5 -4
  216. data/lib/rubygems/bundler_version_finder.rb +2 -2
  217. data/lib/rubygems/command.rb +41 -32
  218. data/lib/rubygems/command_manager.rb +30 -15
  219. data/lib/rubygems/commands/build_command.rb +12 -8
  220. data/lib/rubygems/commands/cert_command.rb +34 -33
  221. data/lib/rubygems/commands/check_command.rb +21 -20
  222. data/lib/rubygems/commands/cleanup_command.rb +18 -17
  223. data/lib/rubygems/commands/contents_command.rb +14 -13
  224. data/lib/rubygems/commands/dependency_command.rb +17 -16
  225. data/lib/rubygems/commands/environment_command.rb +6 -5
  226. data/lib/rubygems/commands/exec_command.rb +249 -0
  227. data/lib/rubygems/commands/fetch_command.rb +10 -9
  228. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  229. data/lib/rubygems/commands/help_command.rb +7 -6
  230. data/lib/rubygems/commands/info_command.rb +3 -3
  231. data/lib/rubygems/commands/install_command.rb +28 -23
  232. data/lib/rubygems/commands/list_command.rb +4 -3
  233. data/lib/rubygems/commands/lock_command.rb +5 -4
  234. data/lib/rubygems/commands/mirror_command.rb +4 -3
  235. data/lib/rubygems/commands/open_command.rb +10 -9
  236. data/lib/rubygems/commands/outdated_command.rb +6 -5
  237. data/lib/rubygems/commands/owner_command.rb +17 -14
  238. data/lib/rubygems/commands/pristine_command.rb +46 -36
  239. data/lib/rubygems/commands/push_command.rb +9 -8
  240. data/lib/rubygems/commands/query_command.rb +9 -8
  241. data/lib/rubygems/commands/rdoc_command.rb +21 -19
  242. data/lib/rubygems/commands/search_command.rb +4 -3
  243. data/lib/rubygems/commands/server_command.rb +4 -3
  244. data/lib/rubygems/commands/setup_command.rb +97 -106
  245. data/lib/rubygems/commands/signin_command.rb +10 -9
  246. data/lib/rubygems/commands/signout_command.rb +8 -7
  247. data/lib/rubygems/commands/sources_command.rb +22 -21
  248. data/lib/rubygems/commands/specification_command.rb +14 -13
  249. data/lib/rubygems/commands/stale_command.rb +3 -2
  250. data/lib/rubygems/commands/uninstall_command.rb +44 -40
  251. data/lib/rubygems/commands/unpack_command.rb +14 -13
  252. data/lib/rubygems/commands/update_command.rb +42 -63
  253. data/lib/rubygems/commands/which_command.rb +8 -7
  254. data/lib/rubygems/commands/yank_command.rb +12 -11
  255. data/lib/rubygems/config_file.rb +55 -21
  256. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  257. data/lib/rubygems/core_ext/kernel_require.rb +109 -115
  258. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  259. data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
  260. data/lib/rubygems/defaults.rb +33 -18
  261. data/lib/rubygems/dependency.rb +15 -11
  262. data/lib/rubygems/dependency_installer.rb +38 -37
  263. data/lib/rubygems/dependency_list.rb +7 -6
  264. data/lib/rubygems/deprecate.rb +3 -2
  265. data/lib/rubygems/doctor.rb +19 -18
  266. data/lib/rubygems/errors.rb +3 -2
  267. data/lib/rubygems/exceptions.rb +16 -8
  268. data/lib/rubygems/ext/build_error.rb +2 -1
  269. data/lib/rubygems/ext/builder.rb +37 -21
  270. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  271. data/lib/rubygems/ext/cargo_builder.rb +150 -111
  272. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  273. data/lib/rubygems/ext/configure_builder.rb +2 -1
  274. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  275. data/lib/rubygems/ext/rake_builder.rb +7 -5
  276. data/lib/rubygems/ext.rb +8 -7
  277. data/lib/rubygems/gem_runner.rb +6 -5
  278. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  279. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  280. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  281. data/lib/rubygems/gemcutter_utilities.rb +90 -34
  282. data/lib/rubygems/indexer.rb +29 -28
  283. data/lib/rubygems/install_default_message.rb +3 -2
  284. data/lib/rubygems/install_message.rb +3 -2
  285. data/lib/rubygems/install_update_options.rb +56 -55
  286. data/lib/rubygems/installer.rb +54 -46
  287. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  288. data/lib/rubygems/local_remote_options.rb +19 -20
  289. data/lib/rubygems/mock_gem_ui.rb +3 -2
  290. data/lib/rubygems/name_tuple.rb +5 -4
  291. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  292. data/lib/rubygems/optparse.rb +1 -1
  293. data/lib/rubygems/package/digest_io.rb +1 -0
  294. data/lib/rubygems/package/file_source.rb +3 -2
  295. data/lib/rubygems/package/io_source.rb +1 -0
  296. data/lib/rubygems/package/old.rb +9 -8
  297. data/lib/rubygems/package/source.rb +1 -0
  298. data/lib/rubygems/package/tar_header.rb +63 -62
  299. data/lib/rubygems/package/tar_reader/entry.rb +91 -9
  300. data/lib/rubygems/package/tar_reader.rb +2 -29
  301. data/lib/rubygems/package/tar_writer.rb +8 -7
  302. data/lib/rubygems/package.rb +64 -48
  303. data/lib/rubygems/package_task.rb +5 -4
  304. data/lib/rubygems/path_support.rb +1 -0
  305. data/lib/rubygems/platform.rb +79 -53
  306. data/lib/rubygems/psych_tree.rb +2 -1
  307. data/lib/rubygems/query_utils.rb +35 -35
  308. data/lib/rubygems/rdoc.rb +3 -2
  309. data/lib/rubygems/remote_fetcher.rb +23 -22
  310. data/lib/rubygems/request/connection_pools.rb +4 -4
  311. data/lib/rubygems/request/http_pool.rb +2 -1
  312. data/lib/rubygems/request/https_pool.rb +1 -0
  313. data/lib/rubygems/request.rb +23 -22
  314. data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
  315. data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
  316. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
  317. data/lib/rubygems/request_set/lockfile.rb +6 -5
  318. data/lib/rubygems/request_set.rb +20 -19
  319. data/lib/rubygems/requirement.rb +15 -14
  320. data/lib/rubygems/resolver/activation_request.rb +4 -3
  321. data/lib/rubygems/resolver/api_set.rb +5 -4
  322. data/lib/rubygems/resolver/api_specification.rb +7 -6
  323. data/lib/rubygems/resolver/best_set.rb +6 -5
  324. data/lib/rubygems/resolver/composed_set.rb +1 -0
  325. data/lib/rubygems/resolver/conflict.rb +11 -10
  326. data/lib/rubygems/resolver/current_set.rb +1 -0
  327. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  328. data/lib/rubygems/resolver/git_set.rb +3 -2
  329. data/lib/rubygems/resolver/git_specification.rb +7 -6
  330. data/lib/rubygems/resolver/index_set.rb +4 -3
  331. data/lib/rubygems/resolver/index_specification.rb +7 -5
  332. data/lib/rubygems/resolver/installed_specification.rb +5 -4
  333. data/lib/rubygems/resolver/installer_set.rb +15 -17
  334. data/lib/rubygems/resolver/local_specification.rb +3 -2
  335. data/lib/rubygems/resolver/lock_set.rb +5 -4
  336. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  340. data/lib/rubygems/resolver/molinillo.rb +2 -1
  341. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  342. data/lib/rubygems/resolver/set.rb +1 -0
  343. data/lib/rubygems/resolver/source_set.rb +2 -0
  344. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  345. data/lib/rubygems/resolver/specification.rb +2 -1
  346. data/lib/rubygems/resolver/stats.rb +2 -1
  347. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  348. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  349. data/lib/rubygems/resolver.rb +41 -40
  350. data/lib/rubygems/s3_uri_signer.rb +10 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -2
  352. data/lib/rubygems/security/policies.rb +48 -47
  353. data/lib/rubygems/security/policy.rb +19 -18
  354. data/lib/rubygems/security/signer.rb +6 -5
  355. data/lib/rubygems/security/trust_dir.rb +5 -4
  356. data/lib/rubygems/security.rb +30 -42
  357. data/lib/rubygems/security_option.rb +6 -5
  358. data/lib/rubygems/shellwords.rb +3 -0
  359. data/lib/rubygems/source/git.rb +22 -22
  360. data/lib/rubygems/source/installed.rb +2 -1
  361. data/lib/rubygems/source/local.rb +3 -2
  362. data/lib/rubygems/source/lock.rb +1 -0
  363. data/lib/rubygems/source/specific_file.rb +2 -1
  364. data/lib/rubygems/source/vendor.rb +1 -0
  365. data/lib/rubygems/source.rb +16 -16
  366. data/lib/rubygems/spec_fetcher.rb +10 -9
  367. data/lib/rubygems/specification.rb +121 -114
  368. data/lib/rubygems/specification_policy.rb +36 -15
  369. data/lib/rubygems/stub_specification.rb +11 -9
  370. data/lib/rubygems/text.rb +2 -2
  371. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  372. data/lib/rubygems/tsort.rb +1 -1
  373. data/lib/rubygems/uninstaller.rb +19 -18
  374. data/lib/rubygems/update_suggestion.rb +69 -0
  375. data/lib/rubygems/uri.rb +4 -4
  376. data/lib/rubygems/uri_formatter.rb +1 -1
  377. data/lib/rubygems/user_interaction.rb +37 -21
  378. data/lib/rubygems/util/licenses.rb +4 -3
  379. data/lib/rubygems/util/list.rb +1 -0
  380. data/lib/rubygems/util.rb +12 -15
  381. data/lib/rubygems/validator.rb +7 -6
  382. data/lib/rubygems/version.rb +17 -11
  383. data/lib/rubygems/version_option.rb +4 -3
  384. data/lib/rubygems.rb +89 -68
  385. data/rubygems-update.gemspec +10 -8
  386. data/setup.rb +10 -9
  387. data/test/rubygems/alternate_cert.pem +14 -14
  388. data/test/rubygems/alternate_cert_32.pem +15 -15
  389. data/test/rubygems/alternate_key.pem +25 -25
  390. data/test/rubygems/bad_rake.rb +1 -0
  391. data/test/rubygems/bundler_test_gem.rb +421 -0
  392. data/test/rubygems/child_cert.pem +15 -16
  393. data/test/rubygems/child_cert_32.pem +15 -16
  394. data/test/rubygems/child_key.pem +25 -25
  395. data/test/rubygems/encrypted_private_key.pem +26 -26
  396. data/test/rubygems/expired_cert.pem +15 -15
  397. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  398. data/test/rubygems/future_cert.pem +15 -15
  399. data/test/rubygems/future_cert_32.pem +15 -15
  400. data/test/rubygems/good_rake.rb +1 -0
  401. data/test/rubygems/grandchild_cert.pem +15 -16
  402. data/test/rubygems/grandchild_cert_32.pem +15 -16
  403. data/test/rubygems/grandchild_key.pem +25 -25
  404. data/test/rubygems/helper.rb +172 -151
  405. data/test/rubygems/installer_test_case.rb +14 -13
  406. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  407. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  408. data/test/rubygems/invalid_key.pem +25 -25
  409. data/test/rubygems/invalid_signer_cert.pem +15 -15
  410. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  411. data/test/rubygems/invalidchild_cert.pem +15 -16
  412. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  413. data/test/rubygems/invalidchild_key.pem +25 -25
  414. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  415. data/test/rubygems/package/tar_test_case.rb +53 -17
  416. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  417. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  418. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  419. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  420. data/test/rubygems/private_key.pem +25 -25
  421. data/test/rubygems/public_cert.pem +16 -16
  422. data/test/rubygems/public_cert_32.pem +15 -15
  423. data/test/rubygems/public_key.pem +7 -7
  424. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  425. data/test/rubygems/rubygems_plugin.rb +3 -2
  426. data/test/rubygems/simple_gem.rb +2 -1
  427. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  428. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
  429. data/test/rubygems/test_bundled_ca.rb +13 -12
  430. data/test/rubygems/test_config.rb +5 -4
  431. data/test/rubygems/test_deprecate.rb +5 -4
  432. data/test/rubygems/test_exit.rb +9 -3
  433. data/test/rubygems/test_gem.rb +339 -677
  434. data/test/rubygems/test_gem_available_set.rb +22 -21
  435. data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
  436. data/test/rubygems/test_gem_command.rb +45 -44
  437. data/test/rubygems/test_gem_command_manager.rb +96 -30
  438. data/test/rubygems/test_gem_commands_build_command.rb +74 -63
  439. data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
  440. data/test/rubygems/test_gem_commands_check_command.rb +5 -4
  441. data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
  442. data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
  443. data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
  444. data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
  445. data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
  446. data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
  447. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
  448. data/test/rubygems/test_gem_commands_help_command.rb +14 -13
  449. data/test/rubygems/test_gem_commands_info_command.rb +29 -2
  450. data/test/rubygems/test_gem_commands_install_command.rb +152 -132
  451. data/test/rubygems/test_gem_commands_list_command.rb +5 -4
  452. data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
  453. data/test/rubygems/test_gem_commands_mirror.rb +3 -2
  454. data/test/rubygems/test_gem_commands_open_command.rb +5 -4
  455. data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
  456. data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
  457. data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
  458. data/test/rubygems/test_gem_commands_push_command.rb +189 -64
  459. data/test/rubygems/test_gem_commands_query_command.rb +74 -73
  460. data/test/rubygems/test_gem_commands_search_command.rb +3 -2
  461. data/test/rubygems/test_gem_commands_server_command.rb +3 -2
  462. data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
  463. data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
  464. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  465. data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
  466. data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
  467. data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
  468. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
  469. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
  470. data/test/rubygems/test_gem_commands_update_command.rb +96 -95
  471. data/test/rubygems/test_gem_commands_which_command.rb +7 -6
  472. data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
  473. data/test/rubygems/test_gem_config_file.rb +94 -81
  474. data/test/rubygems/test_gem_dependency.rb +76 -73
  475. data/test/rubygems/test_gem_dependency_installer.rb +200 -165
  476. data/test/rubygems/test_gem_dependency_list.rb +48 -47
  477. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
  478. data/test/rubygems/test_gem_doctor.rb +27 -26
  479. data/test/rubygems/test_gem_ext_builder.rb +60 -61
  480. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
  481. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
  482. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
  483. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
  484. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  485. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
  486. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  487. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  488. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  489. data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
  490. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
  491. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
  492. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
  493. data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
  494. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  495. data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
  496. data/test/rubygems/test_gem_gem_runner.rb +15 -9
  497. data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
  498. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
  499. data/test/rubygems/test_gem_indexer.rb +87 -67
  500. data/test/rubygems/test_gem_install_update_options.rb +17 -16
  501. data/test/rubygems/test_gem_installer.rb +422 -304
  502. data/test/rubygems/test_gem_local_remote_options.rb +11 -10
  503. data/test/rubygems/test_gem_name_tuple.rb +5 -4
  504. data/test/rubygems/test_gem_package.rb +243 -231
  505. data/test/rubygems/test_gem_package_old.rb +14 -13
  506. data/test/rubygems/test_gem_package_tar_header.rb +48 -47
  507. data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
  508. data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
  509. data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
  510. data/test/rubygems/test_gem_package_task.rb +19 -18
  511. data/test/rubygems/test_gem_path_support.rb +15 -14
  512. data/test/rubygems/test_gem_platform.rb +333 -227
  513. data/test/rubygems/test_gem_rdoc.rb +15 -14
  514. data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
  515. data/test/rubygems/test_gem_request.rb +64 -58
  516. data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
  517. data/test/rubygems/test_gem_request_set.rb +101 -100
  518. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
  519. data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
  520. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
  521. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
  522. data/test/rubygems/test_gem_requirement.rb +48 -41
  523. data/test/rubygems/test_gem_resolver.rb +167 -99
  524. data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
  525. data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
  526. data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
  527. data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
  528. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
  529. data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
  530. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
  531. data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
  532. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
  533. data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
  534. data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
  535. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
  536. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
  537. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
  538. data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
  539. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
  540. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
  541. data/test/rubygems/test_gem_resolver_specification.rb +9 -8
  542. data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
  543. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
  544. data/test/rubygems/test_gem_security.rb +69 -68
  545. data/test/rubygems/test_gem_security_policy.rb +72 -72
  546. data/test/rubygems/test_gem_security_signer.rb +35 -34
  547. data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
  548. data/test/rubygems/test_gem_silent_ui.rb +39 -32
  549. data/test/rubygems/test_gem_source.rb +45 -44
  550. data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
  551. data/test/rubygems/test_gem_source_git.rb +69 -62
  552. data/test/rubygems/test_gem_source_installed.rb +17 -16
  553. data/test/rubygems/test_gem_source_list.rb +6 -5
  554. data/test/rubygems/test_gem_source_local.rb +15 -14
  555. data/test/rubygems/test_gem_source_lock.rb +32 -31
  556. data/test/rubygems/test_gem_source_specific_file.rb +18 -17
  557. data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
  558. data/test/rubygems/test_gem_source_vendor.rb +14 -13
  559. data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
  560. data/test/rubygems/test_gem_specification.rb +533 -469
  561. data/test/rubygems/test_gem_stream_ui.rb +53 -22
  562. data/test/rubygems/test_gem_stub_specification.rb +33 -32
  563. data/test/rubygems/test_gem_text.rb +2 -1
  564. data/test/rubygems/test_gem_uninstaller.rb +118 -117
  565. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
  566. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  567. data/test/rubygems/test_gem_uri.rb +6 -4
  568. data/test/rubygems/test_gem_uri_formatter.rb +15 -14
  569. data/test/rubygems/test_gem_util.rb +24 -23
  570. data/test/rubygems/test_gem_validator.rb +8 -8
  571. data/test/rubygems/test_gem_version.rb +24 -16
  572. data/test/rubygems/test_gem_version_option.rb +16 -15
  573. data/test/rubygems/test_kernel.rb +43 -48
  574. data/test/rubygems/test_project_sanity.rb +32 -3
  575. data/test/rubygems/test_remote_fetch_error.rb +8 -7
  576. data/test/rubygems/test_require.rb +118 -103
  577. data/test/rubygems/test_rubygems.rb +10 -8
  578. data/test/rubygems/test_webauthn_listener.rb +143 -0
  579. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  580. data/test/rubygems/test_webauthn_poller.rb +124 -0
  581. data/test/rubygems/utilities.rb +98 -34
  582. data/test/rubygems/wrong_key_cert.pem +15 -15
  583. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  584. data/test/test_changelog_generator.rb +1 -1
  585. metadata +99 -46
  586. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  587. data/bundler/lib/bundler/templates/gems.rb +0 -5
  588. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  589. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  590. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  591. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  592. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  593. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  594. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  595. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  596. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  597. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  598. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  599. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  600. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  601. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  602. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  603. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  604. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  605. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  606. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  608. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  609. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  610. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  611. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  612. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  613. data/bundler/lib/bundler/version_ranges.rb +0 -122
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  615. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
2
 
4
- require 'webrick'
5
- require 'webrick/https' if Gem::HAVE_OPENSSL
3
+ require_relative "helper"
4
+
5
+ require "webrick"
6
+ require "webrick/https" if Gem::HAVE_OPENSSL
6
7
 
7
8
  unless Gem::HAVE_OPENSSL
8
- warn 'Skipping Gem::RemoteFetcher tests. openssl not found.'
9
+ warn "Skipping Gem::RemoteFetcher tests. openssl not found."
9
10
  end
10
11
 
11
- require 'rubygems/remote_fetcher'
12
- require 'rubygems/package'
12
+ require "rubygems/remote_fetcher"
13
+ require "rubygems/package"
13
14
 
14
15
  # = Testing Proxy Settings
15
16
  #
@@ -28,7 +29,7 @@ require 'rubygems/package'
28
29
  class TestGemRemoteFetcher < Gem::TestCase
29
30
  include Gem::DefaultUserInteraction
30
31
 
31
- SERVER_DATA = <<-EOY.freeze
32
+ SERVER_DATA = <<-EOY
32
33
  --- !ruby/object:Gem::Cache
33
34
  gems:
34
35
  rake-0.4.11: !ruby/object:Gem::Specification
@@ -69,7 +70,7 @@ gems:
69
70
  dependencies: []
70
71
  EOY
71
72
 
72
- PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, '0.4.2')
73
+ PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, "0.4.2")
73
74
 
74
75
  # Generated via:
75
76
  # x = OpenSSL::PKey::DH.new(2048) # wait a while...
@@ -104,11 +105,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
104
105
  @cache_dir = File.join @gemhome, "cache"
105
106
 
106
107
  # TODO: why does the remote fetcher need it written to disk?
107
- @a1, @a1_gem = util_gem 'a', '1' do |s|
108
- s.executables << 'a_bin'
108
+ @a1, @a1_gem = util_gem "a", "1" do |s|
109
+ s.executables << "a_bin"
109
110
  end
110
111
 
111
- @a1.loaded_from = File.join(@gemhome, 'specifications', @a1.full_name)
112
+ @a1.loaded_from = File.join(@gemhome, "specifications", @a1.full_name)
112
113
 
113
114
  Gem::RemoteFetcher.fetcher = nil
114
115
  @stub_ui = Gem::MockGemUi.new
@@ -130,7 +131,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
130
131
  end
131
132
 
132
133
  def test_self_fetcher_with_proxy
133
- proxy_uri = 'http://proxy.example.com'
134
+ proxy_uri = "http://proxy.example.com"
134
135
  Gem.configuration[:http_proxy] = proxy_uri
135
136
  Gem::RemoteFetcher.fetcher = nil
136
137
 
@@ -149,34 +150,34 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
149
150
  @fetcher.fetch_path("gems.example.com/yaml", nil, true)
150
151
  end
151
152
 
152
- assert_equal 'uri scheme is invalid: nil', e.message
153
+ assert_equal "uri scheme is invalid: nil", e.message
153
154
  end
154
155
 
155
156
  def test_no_proxy
156
157
  use_ui @stub_ui do
157
158
  assert_data_from_server @fetcher.fetch_path(@server_uri)
158
159
  response = @fetcher.fetch_path(@server_uri, nil, true)
159
- assert_equal SERVER_DATA.size, response['content-length'].to_i
160
+ assert_equal SERVER_DATA.size, response["content-length"].to_i
160
161
  end
161
162
  end
162
163
 
163
164
  def test_cache_update_path
164
- uri = URI 'http://example/file'
165
- path = File.join @tempdir, 'file'
165
+ uri = URI "http://example/file"
166
+ path = File.join @tempdir, "file"
166
167
 
167
- fetcher = util_fuck_with_fetcher 'hello'
168
+ fetcher = util_fuck_with_fetcher "hello"
168
169
 
169
170
  data = fetcher.cache_update_path uri, path
170
171
 
171
- assert_equal 'hello', data
172
+ assert_equal "hello", data
172
173
 
173
- assert_equal 'hello', File.read(path)
174
+ assert_equal "hello", File.read(path)
174
175
  end
175
176
 
176
177
  def test_cache_update_path_with_utf8_internal_encoding
177
- with_internal_encoding('UTF-8') do
178
- uri = URI 'http://example/file'
179
- path = File.join @tempdir, 'file'
178
+ with_internal_encoding("UTF-8") do
179
+ uri = URI "http://example/file"
180
+ path = File.join @tempdir, "file"
180
181
  data = String.new("\xC8").force_encoding(Encoding::BINARY)
181
182
 
182
183
  fetcher = util_fuck_with_fetcher data
@@ -189,14 +190,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
189
190
  end
190
191
 
191
192
  def test_cache_update_path_no_update
192
- uri = URI 'http://example/file'
193
- path = File.join @tempdir, 'file'
193
+ uri = URI "http://example/file"
194
+ path = File.join @tempdir, "file"
194
195
 
195
- fetcher = util_fuck_with_fetcher 'hello'
196
+ fetcher = util_fuck_with_fetcher "hello"
196
197
 
197
198
  data = fetcher.cache_update_path uri, path, false
198
199
 
199
- assert_equal 'hello', data
200
+ assert_equal "hello", data
200
201
 
201
202
  assert_path_not_exist path
202
203
  end
@@ -219,7 +220,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
219
220
  @test_data
220
221
  end
221
222
 
222
- raise Gem::RemoteFetcher::FetchError.new("haha!", '')
223
+ raise Gem::RemoteFetcher::FetchError.new("haha!", "")
223
224
  end
224
225
  end
225
226
 
@@ -228,14 +229,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
228
229
 
229
230
  def test_download
230
231
  a1_data = nil
231
- File.open @a1_gem, 'rb' do |fp|
232
+ File.open @a1_gem, "rb" do |fp|
232
233
  a1_data = fp.read
233
234
  end
234
235
 
235
236
  fetcher = util_fuck_with_fetcher a1_data
236
237
 
237
238
  a1_cache_gem = @a1.cache_file
238
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://gems.example.com')
239
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://gems.example.com")
239
240
  assert_equal("http://gems.example.com/gems/a-1.gem",
240
241
  fetcher.instance_variable_get(:@test_arg).to_s)
241
242
  assert File.exist?(a1_cache_gem)
@@ -243,14 +244,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
243
244
 
244
245
  def test_download_with_auth
245
246
  a1_data = nil
246
- File.open @a1_gem, 'rb' do |fp|
247
+ File.open @a1_gem, "rb" do |fp|
247
248
  a1_data = fp.read
248
249
  end
249
250
 
250
251
  fetcher = util_fuck_with_fetcher a1_data
251
252
 
252
253
  a1_cache_gem = @a1.cache_file
253
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://user:password@gems.example.com')
254
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:password@gems.example.com")
254
255
  assert_equal("http://user:password@gems.example.com/gems/a-1.gem",
255
256
  fetcher.instance_variable_get(:@test_arg).to_s)
256
257
  assert File.exist?(a1_cache_gem)
@@ -258,14 +259,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
258
259
 
259
260
  def test_download_with_token
260
261
  a1_data = nil
261
- File.open @a1_gem, 'rb' do |fp|
262
+ File.open @a1_gem, "rb" do |fp|
262
263
  a1_data = fp.read
263
264
  end
264
265
 
265
266
  fetcher = util_fuck_with_fetcher a1_data
266
267
 
267
268
  a1_cache_gem = @a1.cache_file
268
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://token@gems.example.com')
269
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://token@gems.example.com")
269
270
  assert_equal("http://token@gems.example.com/gems/a-1.gem",
270
271
  fetcher.instance_variable_get(:@test_arg).to_s)
271
272
  assert File.exist?(a1_cache_gem)
@@ -273,14 +274,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
273
274
 
274
275
  def test_download_with_x_oauth_basic
275
276
  a1_data = nil
276
- File.open @a1_gem, 'rb' do |fp|
277
+ File.open @a1_gem, "rb" do |fp|
277
278
  a1_data = fp.read
278
279
  end
279
280
 
280
281
  fetcher = util_fuck_with_fetcher a1_data
281
282
 
282
283
  a1_cache_gem = @a1.cache_file
283
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://token:x-oauth-basic@gems.example.com')
284
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://token:x-oauth-basic@gems.example.com")
284
285
  assert_equal("http://token:x-oauth-basic@gems.example.com/gems/a-1.gem",
285
286
  fetcher.instance_variable_get(:@test_arg).to_s)
286
287
  assert File.exist?(a1_cache_gem)
@@ -288,14 +289,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
288
289
 
289
290
  def test_download_with_encoded_auth
290
291
  a1_data = nil
291
- File.open @a1_gem, 'rb' do |fp|
292
+ File.open @a1_gem, "rb" do |fp|
292
293
  a1_data = fp.read
293
294
  end
294
295
 
295
296
  fetcher = util_fuck_with_fetcher a1_data
296
297
 
297
298
  a1_cache_gem = @a1.cache_file
298
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://user:%25pas%25sword@gems.example.com')
299
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:%25pas%25sword@gems.example.com")
299
300
  assert_equal("http://user:%25pas%25sword@gems.example.com/gems/a-1.gem",
300
301
  fetcher.instance_variable_get(:@test_arg).to_s)
301
302
  assert File.exist?(a1_cache_gem)
@@ -306,7 +307,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
306
307
 
307
308
  inst = Gem::RemoteFetcher.fetcher
308
309
 
309
- assert_equal @a1.cache_file, inst.download(@a1, 'http://gems.example.com')
310
+ assert_equal @a1.cache_file, inst.download(@a1, "http://gems.example.com")
310
311
  end
311
312
 
312
313
  def test_download_local
@@ -322,7 +323,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
322
323
  end
323
324
 
324
325
  def test_download_local_space
325
- space_path = File.join @tempdir, 'space path'
326
+ space_path = File.join @tempdir, "space path"
326
327
  FileUtils.mkdir space_path
327
328
  FileUtils.mv @a1_gem, space_path
328
329
  local_path = File.join space_path, @a1.file_name
@@ -336,17 +337,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
336
337
  end
337
338
 
338
339
  def test_download_install_dir
339
- a1_data = File.open @a1_gem, 'rb' do |fp|
340
+ a1_data = File.open @a1_gem, "rb" do |fp|
340
341
  fp.read
341
342
  end
342
343
 
343
344
  fetcher = util_fuck_with_fetcher a1_data
344
345
 
345
- install_dir = File.join @tempdir, 'more_gems'
346
+ install_dir = File.join @tempdir, "more_gems"
346
347
 
347
348
  a1_cache_gem = File.join install_dir, "cache", @a1.file_name
348
349
  FileUtils.mkdir_p(File.dirname(a1_cache_gem))
349
- actual = fetcher.download(@a1, 'http://gems.example.com', install_dir)
350
+ actual = fetcher.download(@a1, "http://gems.example.com", install_dir)
350
351
 
351
352
  assert_equal a1_cache_gem, actual
352
353
  assert_equal("http://gems.example.com/gems/a-1.gem",
@@ -380,7 +381,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
380
381
  FileUtils.chmod 0555, @gemhome
381
382
 
382
383
  fetcher = util_fuck_with_fetcher File.read(@a1_gem)
383
- fetcher.download(@a1, 'http://gems.example.com')
384
+ fetcher.download(@a1, "http://gems.example.com")
384
385
  a1_cache_gem = File.join Gem.user_dir, "cache", @a1.file_name
385
386
  assert File.exist? a1_cache_gem
386
387
  ensure
@@ -390,16 +391,16 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
390
391
  end
391
392
 
392
393
  def test_download_platform_legacy
393
- original_platform = 'old-platform'
394
+ original_platform = "old-platform"
394
395
 
395
- e1, e1_gem = util_gem 'e', '1' do |s|
396
+ e1, e1_gem = util_gem "e", "1" do |s|
396
397
  s.platform = Gem::Platform::CURRENT
397
398
  s.instance_variable_set :@original_platform, original_platform
398
399
  end
399
- e1.loaded_from = File.join(@gemhome, 'specifications', e1.full_name)
400
+ e1.loaded_from = File.join(@gemhome, "specifications", e1.full_name)
400
401
 
401
402
  e1_data = nil
402
- File.open e1_gem, 'rb' do |fp|
403
+ File.open e1_gem, "rb" do |fp|
403
404
  e1_data = fp.read
404
405
  end
405
406
 
@@ -407,7 +408,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
407
408
 
408
409
  e1_cache_gem = e1.cache_file
409
410
 
410
- assert_equal e1_cache_gem, fetcher.download(e1, 'http://gems.example.com')
411
+ assert_equal e1_cache_gem, fetcher.download(e1, "http://gems.example.com")
411
412
 
412
413
  assert_equal("http://gems.example.com/gems/#{e1.original_name}.gem",
413
414
  fetcher.instance_variable_get(:@test_arg).to_s)
@@ -435,14 +436,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
435
436
  inst = Gem::RemoteFetcher.fetcher
436
437
 
437
438
  e = assert_raise ArgumentError do
438
- inst.download @a1, 'ftp://gems.rubyforge.org'
439
+ inst.download @a1, "ftp://gems.rubyforge.org"
439
440
  end
440
441
 
441
- assert_equal 'unsupported URI scheme ftp', e.message
442
+ assert_equal "unsupported URI scheme ftp", e.message
442
443
  end
443
444
 
444
445
  def test_download_to_cache
445
- @a2, @a2_gem = util_gem 'a', '2'
446
+ @a2, @a2_gem = util_gem "a", "2"
446
447
 
447
448
  util_setup_spec_fetcher @a1, @a2
448
449
  @fetcher.instance_variable_set :@a1, @a1
@@ -458,7 +459,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
458
459
  end
459
460
  end
460
461
 
461
- gem = Gem::RemoteFetcher.fetcher.download_to_cache dep 'a'
462
+ gem = Gem::RemoteFetcher.fetcher.download_to_cache dep "a"
462
463
 
463
464
  assert_equal @a2.file_name, File.basename(gem)
464
465
  end
@@ -468,10 +469,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
468
469
  @fetcher = fetcher
469
470
 
470
471
  def fetcher.fetch_http(uri, mtime, head = nil)
471
- Gem::Util.gzip 'foo'
472
+ Gem::Util.gzip "foo"
472
473
  end
473
474
 
474
- assert_equal 'foo', fetcher.fetch_path(@uri + 'foo.gz')
475
+ assert_equal "foo", fetcher.fetch_path(@uri + "foo.gz")
475
476
  end
476
477
 
477
478
  def test_fetch_path_gzip_unmodified
@@ -482,7 +483,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
482
483
  nil
483
484
  end
484
485
 
485
- assert_nil fetcher.fetch_path(@uri + 'foo.gz', Time.at(0))
486
+ assert_nil fetcher.fetch_path(@uri + "foo.gz", Time.at(0))
486
487
  end
487
488
 
488
489
  def test_fetch_path_io_error
@@ -493,7 +494,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
493
494
  raise EOFError
494
495
  end
495
496
 
496
- url = 'http://example.com/uri'
497
+ url = "http://example.com/uri"
497
498
 
498
499
  e = assert_raise Gem::RemoteFetcher::FetchError do
499
500
  fetcher.fetch_path url
@@ -511,7 +512,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
511
512
  raise SocketError
512
513
  end
513
514
 
514
- url = 'http://example.com/uri'
515
+ url = "http://example.com/uri"
515
516
 
516
517
  e = assert_raise Gem::RemoteFetcher::FetchError do
517
518
  fetcher.fetch_path url
@@ -526,10 +527,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
526
527
  @fetcher = fetcher
527
528
 
528
529
  def fetcher.fetch_http(uri, mtime = nil, head = nil)
529
- raise Errno::ECONNREFUSED, 'connect(2)'
530
+ raise Errno::ECONNREFUSED, "connect(2)"
530
531
  end
531
532
 
532
- url = 'http://example.com/uri'
533
+ url = "http://example.com/uri"
533
534
 
534
535
  e = assert_raise Gem::RemoteFetcher::FetchError do
535
536
  fetcher.fetch_path url
@@ -545,10 +546,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
545
546
  @fetcher = fetcher
546
547
 
547
548
  def fetcher.fetch_http(uri, mtime = nil, head = nil)
548
- raise Timeout::Error, 'timed out'
549
+ raise Timeout::Error, "timed out"
549
550
  end
550
551
 
551
- url = 'http://example.com/uri'
552
+ url = "http://example.com/uri"
552
553
 
553
554
  e = assert_raise Gem::RemoteFetcher::FetchError do
554
555
  fetcher.fetch_path url
@@ -564,10 +565,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
564
565
  @fetcher = fetcher
565
566
 
566
567
  def fetcher.fetch_http(uri, mtime = nil, head = nil)
567
- raise SocketError, 'getaddrinfo: nodename nor servname provided'
568
+ raise SocketError, "getaddrinfo: nodename nor servname provided"
568
569
  end
569
570
 
570
- url = 'http://example.com/uri'
571
+ url = "http://example.com/uri"
571
572
 
572
573
  e = assert_raise Gem::RemoteFetcher::FetchError do
573
574
  fetcher.fetch_path url
@@ -586,7 +587,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
586
587
  raise OpenSSL::SSL::SSLError
587
588
  end
588
589
 
589
- url = 'http://example.com/uri'
590
+ url = "http://example.com/uri"
590
591
 
591
592
  e = assert_raise Gem::RemoteFetcher::FetchError do
592
593
  fetcher.fetch_path url
@@ -609,7 +610,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
609
610
 
610
611
  def test_implicit_no_proxy
611
612
  use_ui @stub_ui do
612
- ENV['http_proxy'] = 'http://fakeurl:12345'
613
+ ENV["http_proxy"] = "http://fakeurl:12345"
613
614
  fetcher = Gem::RemoteFetcher.new :no_proxy
614
615
  @fetcher = fetcher
615
616
  assert_data_from_server fetcher.fetch_path(@server_uri)
@@ -618,7 +619,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
618
619
 
619
620
  def test_implicit_proxy
620
621
  use_ui @stub_ui do
621
- ENV['http_proxy'] = @proxy_uri
622
+ ENV["http_proxy"] = @proxy_uri
622
623
  fetcher = Gem::RemoteFetcher.new nil
623
624
  @fetcher = fetcher
624
625
  assert_data_from_proxy fetcher.fetch_path(@server_uri)
@@ -627,7 +628,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
627
628
 
628
629
  def test_implicit_upper_case_proxy
629
630
  use_ui @stub_ui do
630
- ENV['HTTP_PROXY'] = @proxy_uri
631
+ ENV["HTTP_PROXY"] = @proxy_uri
631
632
  fetcher = Gem::RemoteFetcher.new nil
632
633
  @fetcher = fetcher
633
634
  assert_data_from_proxy fetcher.fetch_path(@server_uri)
@@ -645,36 +646,36 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
645
646
  def test_fetch_http
646
647
  fetcher = Gem::RemoteFetcher.new nil
647
648
  @fetcher = fetcher
648
- url = 'http://gems.example.com/redirect'
649
+ url = "http://gems.example.com/redirect"
649
650
 
650
651
  def fetcher.request(uri, request_class, last_modified = nil)
651
- url = 'http://gems.example.com/redirect'
652
+ url = "http://gems.example.com/redirect"
652
653
  unless defined? @requested
653
654
  @requested = true
654
655
  res = Net::HTTPMovedPermanently.new nil, 301, nil
655
- res.add_field 'Location', url
656
+ res.add_field "Location", url
656
657
  res
657
658
  else
658
659
  res = Net::HTTPOK.new nil, 200, nil
659
- def res.body() 'real_path' end
660
+ def res.body() "real_path" end
660
661
  res
661
662
  end
662
663
  end
663
664
 
664
665
  data = fetcher.fetch_http URI.parse(url)
665
666
 
666
- assert_equal 'real_path', data
667
+ assert_equal "real_path", data
667
668
  end
668
669
 
669
670
  def test_fetch_http_redirects
670
671
  fetcher = Gem::RemoteFetcher.new nil
671
672
  @fetcher = fetcher
672
- url = 'http://gems.example.com/redirect'
673
+ url = "http://gems.example.com/redirect"
673
674
 
674
675
  def fetcher.request(uri, request_class, last_modified = nil)
675
- url = 'http://gems.example.com/redirect'
676
+ url = "http://gems.example.com/redirect"
676
677
  res = Net::HTTPMovedPermanently.new nil, 301, nil
677
- res.add_field 'Location', url
678
+ res.add_field "Location", url
678
679
  res
679
680
  end
680
681
 
@@ -688,7 +689,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
688
689
  def test_fetch_http_redirects_without_location
689
690
  fetcher = Gem::RemoteFetcher.new nil
690
691
  @fetcher = fetcher
691
- url = 'http://gems.example.com/redirect'
692
+ url = "http://gems.example.com/redirect"
692
693
 
693
694
  def fetcher.request(uri, request_class, last_modified = nil)
694
695
  res = Net::HTTPMovedPermanently.new nil, 301, nil
@@ -710,7 +711,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
710
711
  assert_equal "murphy", fetcher.fetch_path(@server_uri)
711
712
  end
712
713
 
713
- def assert_fetch_s3(url, signature, token=nil, region='us-east-1', instance_profile_json=nil)
714
+ def assert_fetch_s3(url, signature, token=nil, region="us-east-1", instance_profile_json=nil)
714
715
  fetcher = Gem::RemoteFetcher.new nil
715
716
  @fetcher = fetcher
716
717
  $fetched_uri = nil
@@ -719,12 +720,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
719
720
  def fetcher.request(uri, request_class, last_modified = nil)
720
721
  $fetched_uri = uri
721
722
  res = Net::HTTPOK.new nil, 200, nil
722
- def res.body() 'success' end
723
+ def res.body() "success" end
723
724
  res
724
725
  end
725
726
 
726
727
  def fetcher.s3_uri_signer(uri)
727
- require 'json'
728
+ require "json"
728
729
  s3_uri_signer = Gem::S3URISigner.new(uri)
729
730
  def s3_uri_signer.ec2_metadata_credentials_json
730
731
  JSON.parse($instance_profile)
@@ -738,18 +739,18 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
738
739
  data = fetcher.fetch_s3 URI.parse(url)
739
740
 
740
741
  assert_equal "https://my-bucket.s3.#{region}.amazonaws.com/gems/specs.4.8.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=testuser%2F20190624%2F#{region}%2Fs3%2Faws4_request&X-Amz-Date=20190624T050641Z&X-Amz-Expires=86400#{token ? "&X-Amz-Security-Token=" + token : ""}&X-Amz-SignedHeaders=host&X-Amz-Signature=#{signature}", $fetched_uri.to_s
741
- assert_equal 'success', data
742
+ assert_equal "success", data
742
743
  ensure
743
744
  $fetched_uri = nil
744
745
  end
745
746
 
746
747
  def test_fetch_s3_config_creds
747
748
  Gem.configuration[:s3_source] = {
748
- 'my-bucket' => { :id => 'testuser', :secret => 'testpass' },
749
+ "my-bucket" => { :id => "testuser", :secret => "testpass" },
749
750
  }
750
- url = 's3://my-bucket/gems/specs.4.8.gz'
751
+ url = "s3://my-bucket/gems/specs.4.8.gz"
751
752
  Time.stub :now, Time.at(1561353581) do
752
- assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
753
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
753
754
  end
754
755
  ensure
755
756
  Gem.configuration[:s3_source] = nil
@@ -757,11 +758,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
757
758
 
758
759
  def test_fetch_s3_config_creds_with_region
759
760
  Gem.configuration[:s3_source] = {
760
- 'my-bucket' => { :id => 'testuser', :secret => 'testpass', :region => 'us-west-2' },
761
+ "my-bucket" => { :id => "testuser", :secret => "testpass", :region => "us-west-2" },
761
762
  }
762
- url = 's3://my-bucket/gems/specs.4.8.gz'
763
+ url = "s3://my-bucket/gems/specs.4.8.gz"
763
764
  Time.stub :now, Time.at(1561353581) do
764
- assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2'
765
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
765
766
  end
766
767
  ensure
767
768
  Gem.configuration[:s3_source] = nil
@@ -769,79 +770,79 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
769
770
 
770
771
  def test_fetch_s3_config_creds_with_token
771
772
  Gem.configuration[:s3_source] = {
772
- 'my-bucket' => { :id => 'testuser', :secret => 'testpass', :security_token => 'testtoken' },
773
+ "my-bucket" => { :id => "testuser", :secret => "testpass", :security_token => "testtoken" },
773
774
  }
774
- url = 's3://my-bucket/gems/specs.4.8.gz'
775
+ url = "s3://my-bucket/gems/specs.4.8.gz"
775
776
  Time.stub :now, Time.at(1561353581) do
776
- assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken'
777
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
777
778
  end
778
779
  ensure
779
780
  Gem.configuration[:s3_source] = nil
780
781
  end
781
782
 
782
783
  def test_fetch_s3_env_creds
783
- ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
784
- ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
785
- ENV['AWS_SESSION_TOKEN'] = nil
784
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
785
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
786
+ ENV["AWS_SESSION_TOKEN"] = nil
786
787
  Gem.configuration[:s3_source] = {
787
- 'my-bucket' => { :provider => 'env' },
788
+ "my-bucket" => { :provider => "env" },
788
789
  }
789
- url = 's3://my-bucket/gems/specs.4.8.gz'
790
+ url = "s3://my-bucket/gems/specs.4.8.gz"
790
791
  Time.stub :now, Time.at(1561353581) do
791
- assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
792
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
792
793
  end
793
794
  ensure
794
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
795
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
795
796
  Gem.configuration[:s3_source] = nil
796
797
  end
797
798
 
798
799
  def test_fetch_s3_env_creds_with_region
799
- ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
800
- ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
801
- ENV['AWS_SESSION_TOKEN'] = nil
800
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
801
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
802
+ ENV["AWS_SESSION_TOKEN"] = nil
802
803
  Gem.configuration[:s3_source] = {
803
- 'my-bucket' => { :provider => 'env', :region => 'us-west-2' },
804
+ "my-bucket" => { :provider => "env", :region => "us-west-2" },
804
805
  }
805
- url = 's3://my-bucket/gems/specs.4.8.gz'
806
+ url = "s3://my-bucket/gems/specs.4.8.gz"
806
807
  Time.stub :now, Time.at(1561353581) do
807
- assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2'
808
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
808
809
  end
809
810
  ensure
810
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
811
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
811
812
  Gem.configuration[:s3_source] = nil
812
813
  end
813
814
 
814
815
  def test_fetch_s3_env_creds_with_token
815
- ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
816
- ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
817
- ENV['AWS_SESSION_TOKEN'] = 'testtoken'
816
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
817
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
818
+ ENV["AWS_SESSION_TOKEN"] = "testtoken"
818
819
  Gem.configuration[:s3_source] = {
819
- 'my-bucket' => { :provider => 'env' },
820
+ "my-bucket" => { :provider => "env" },
820
821
  }
821
- url = 's3://my-bucket/gems/specs.4.8.gz'
822
+ url = "s3://my-bucket/gems/specs.4.8.gz"
822
823
  Time.stub :now, Time.at(1561353581) do
823
- assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken'
824
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
824
825
  end
825
826
  ensure
826
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
827
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
827
828
  Gem.configuration[:s3_source] = nil
828
829
  end
829
830
 
830
831
  def test_fetch_s3_url_creds
831
- url = 's3://testuser:testpass@my-bucket/gems/specs.4.8.gz'
832
+ url = "s3://testuser:testpass@my-bucket/gems/specs.4.8.gz"
832
833
  Time.stub :now, Time.at(1561353581) do
833
- assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
834
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
834
835
  end
835
836
  end
836
837
 
837
838
  def test_fetch_s3_instance_profile_creds
838
839
  Gem.configuration[:s3_source] = {
839
- 'my-bucket' => { :provider => 'instance_profile' },
840
+ "my-bucket" => { :provider => "instance_profile" },
840
841
  }
841
842
 
842
- url = 's3://my-bucket/gems/specs.4.8.gz'
843
+ url = "s3://my-bucket/gems/specs.4.8.gz"
843
844
  Time.stub :now, Time.at(1561353581) do
844
- assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b', nil, 'us-east-1',
845
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b", nil, "us-east-1",
845
846
  '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
846
847
  end
847
848
  ensure
@@ -850,12 +851,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
850
851
 
851
852
  def test_fetch_s3_instance_profile_creds_with_region
852
853
  Gem.configuration[:s3_source] = {
853
- 'my-bucket' => { :provider => 'instance_profile', :region => 'us-west-2' },
854
+ "my-bucket" => { :provider => "instance_profile", :region => "us-west-2" },
854
855
  }
855
856
 
856
- url = 's3://my-bucket/gems/specs.4.8.gz'
857
+ url = "s3://my-bucket/gems/specs.4.8.gz"
857
858
  Time.stub :now, Time.at(1561353581) do
858
- assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2',
859
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2",
859
860
  '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
860
861
  end
861
862
  ensure
@@ -864,12 +865,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
864
865
 
865
866
  def test_fetch_s3_instance_profile_creds_with_token
866
867
  Gem.configuration[:s3_source] = {
867
- 'my-bucket' => { :provider => 'instance_profile' },
868
+ "my-bucket" => { :provider => "instance_profile" },
868
869
  }
869
870
 
870
- url = 's3://my-bucket/gems/specs.4.8.gz'
871
+ url = "s3://my-bucket/gems/specs.4.8.gz"
871
872
  Time.stub :now, Time.at(1561353581) do
872
- assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken', 'us-east-1',
873
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken", "us-east-1",
873
874
  '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass", "Token": "testtoken"}'
874
875
  end
875
876
  ensure
@@ -888,35 +889,35 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
888
889
  end
889
890
 
890
891
  def test_fetch_s3_no_source_key
891
- url = 's3://my-bucket/gems/specs.4.8.gz'
892
- refute_fetch_s3 url, 'no s3_source key exists in .gemrc'
892
+ url = "s3://my-bucket/gems/specs.4.8.gz"
893
+ refute_fetch_s3 url, "no s3_source key exists in .gemrc"
893
894
  end
894
895
 
895
896
  def test_fetch_s3_no_host
896
897
  Gem.configuration[:s3_source] = {
897
- 'my-bucket' => { :id => 'testuser', :secret => 'testpass' },
898
+ "my-bucket" => { :id => "testuser", :secret => "testpass" },
898
899
  }
899
900
 
900
- url = 's3://other-bucket/gems/specs.4.8.gz'
901
- refute_fetch_s3 url, 'no key for host other-bucket in s3_source in .gemrc'
901
+ url = "s3://other-bucket/gems/specs.4.8.gz"
902
+ refute_fetch_s3 url, "no key for host other-bucket in s3_source in .gemrc"
902
903
  ensure
903
904
  Gem.configuration[:s3_source] = nil
904
905
  end
905
906
 
906
907
  def test_fetch_s3_no_id
907
- Gem.configuration[:s3_source] = { 'my-bucket' => { :secret => 'testpass' } }
908
+ Gem.configuration[:s3_source] = { "my-bucket" => { :secret => "testpass" } }
908
909
 
909
- url = 's3://my-bucket/gems/specs.4.8.gz'
910
- refute_fetch_s3 url, 's3_source for my-bucket missing id or secret'
910
+ url = "s3://my-bucket/gems/specs.4.8.gz"
911
+ refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
911
912
  ensure
912
913
  Gem.configuration[:s3_source] = nil
913
914
  end
914
915
 
915
916
  def test_fetch_s3_no_secret
916
- Gem.configuration[:s3_source] = { 'my-bucket' => { :id => 'testuser' } }
917
+ Gem.configuration[:s3_source] = { "my-bucket" => { :id => "testuser" } }
917
918
 
918
- url = 's3://my-bucket/gems/specs.4.8.gz'
919
- refute_fetch_s3 url, 's3_source for my-bucket missing id or secret'
919
+ url = "s3://my-bucket/gems/specs.4.8.gz"
920
+ refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
920
921
  ensure
921
922
  Gem.configuration[:s3_source] = nil
922
923
  end
@@ -946,7 +947,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
946
947
  @fetcher = fetcher
947
948
 
948
949
  assert_throws :block_called do
949
- fetcher.request URI('http://example'), Net::HTTP::Get do |req|
950
+ fetcher.request URI("http://example"), Net::HTTP::Get do |req|
950
951
  assert_kind_of Net::HTTPGenericRequest, req
951
952
  throw :block_called
952
953
  end
@@ -964,7 +965,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
964
965
 
965
966
  def test_ssl_connection
966
967
  ssl_server = start_ssl_server
967
- temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
968
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
968
969
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
969
970
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
970
971
  end
@@ -975,8 +976,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
975
976
  :SSLVerifyClient =>
976
977
  OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
977
978
 
978
- temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
979
- temp_client_cert = File.join(__dir__, 'client.pem')
979
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
980
+ temp_client_cert = File.join(__dir__, "client.pem")
980
981
 
981
982
  with_configured_fetcher(
982
983
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
@@ -990,8 +991,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
990
991
  :SSLVerifyClient =>
991
992
  OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
992
993
 
993
- temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
994
- temp_client_cert = File.join(__dir__, 'invalid_client.pem')
994
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
995
+ temp_client_cert = File.join(__dir__, "invalid_client.pem")
995
996
 
996
997
  with_configured_fetcher(
997
998
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
@@ -1020,7 +1021,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1020
1021
 
1021
1022
  def test_do_not_follow_insecure_redirect
1022
1023
  ssl_server = start_ssl_server
1023
- temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
1024
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
1024
1025
  expected_error_message =
1025
1026
  "redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
1026
1027
 
@@ -1046,8 +1047,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1046
1047
 
1047
1048
  def with_configured_fetcher(config_str = nil, &block)
1048
1049
  if config_str
1049
- temp_conf = File.join @tempdir, '.gemrc'
1050
- File.open temp_conf, 'w' do |fp|
1050
+ temp_conf = File.join @tempdir, ".gemrc"
1051
+ File.open temp_conf, "w" do |fp|
1051
1052
  fp.puts config_str
1052
1053
  end
1053
1054
  Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
@@ -1136,9 +1137,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1136
1137
  :Logger => null_logger,
1137
1138
  :AccessLog => [],
1138
1139
  :SSLEnable => true,
1139
- :SSLCACertificateFile => File.join(__dir__, 'ca_cert.pem'),
1140
- :SSLCertificate => cert('ssl_cert.pem'),
1141
- :SSLPrivateKey => key('ssl_key.pem'),
1140
+ :SSLCACertificateFile => File.join(__dir__, "ca_cert.pem"),
1141
+ :SSLCertificate => cert("ssl_cert.pem"),
1142
+ :SSLPrivateKey => key("ssl_key.pem"),
1142
1143
  :SSLVerifyClient => nil,
1143
1144
  :SSLCertName => nil,
1144
1145
  }.merge(config))
@@ -1146,7 +1147,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1146
1147
  res.body = "--- true\n"
1147
1148
  end
1148
1149
  server.mount_proc("/insecure_redirect") do |req, res|
1149
- res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
1150
+ res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query["to"])
1150
1151
  end
1151
1152
  server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
1152
1153
  t = Thread.new do
@@ -1174,10 +1175,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1174
1175
  def start_server(data)
1175
1176
  null_logger = NilLog.new
1176
1177
  s = WEBrick::HTTPServer.new(
1177
- :Port => 0,
1178
- :DocumentRoot => nil,
1179
- :Logger => null_logger,
1180
- :AccessLog => null_logger
1178
+ :Port => 0,
1179
+ :DocumentRoot => nil,
1180
+ :Logger => null_logger,
1181
+ :AccessLog => null_logger
1181
1182
  )
1182
1183
  s.mount_proc("/kill") {|req, res| s.shutdown }
1183
1184
  s.mount_proc("/yaml") do |req, res|
@@ -1185,22 +1186,22 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1185
1186
  res.body = req["X-Captain"]
1186
1187
  elsif @enable_yaml
1187
1188
  res.body = data
1188
- res['Content-Type'] = 'text/plain'
1189
- res['content-length'] = data.size
1189
+ res["Content-Type"] = "text/plain"
1190
+ res["content-length"] = data.size
1190
1191
  else
1191
1192
  res.status = "404"
1192
1193
  res.body = "<h1>NOT FOUND</h1>"
1193
- res['Content-Type'] = 'text/html'
1194
+ res["Content-Type"] = "text/html"
1194
1195
  end
1195
1196
  end
1196
1197
  s.mount_proc("/yaml.Z") do |req, res|
1197
1198
  if @enable_zip
1198
1199
  res.body = Zlib::Deflate.deflate(data)
1199
- res['Content-Type'] = 'text/plain'
1200
+ res["Content-Type"] = "text/plain"
1200
1201
  else
1201
1202
  res.status = "404"
1202
1203
  res.body = "<h1>NOT FOUND</h1>"
1203
- res['Content-Type'] = 'text/html'
1204
+ res["Content-Type"] = "text/html"
1204
1205
  end
1205
1206
  end
1206
1207
  th = Thread.new do