rubygems-update 3.1.6 → 3.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (703) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +1452 -514
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +74 -27
  5. data/Manifest.txt +154 -117
  6. data/POLICIES.md +27 -19
  7. data/README.md +10 -8
  8. data/UPGRADING.md +5 -81
  9. data/bin/gem +3 -8
  10. data/bin/update_rubygems +5 -5
  11. data/bundler/CHANGELOG.md +2358 -1430
  12. data/bundler/README.md +7 -9
  13. data/bundler/UPGRADING.md +27 -34
  14. data/bundler/bundler.gemspec +8 -11
  15. data/bundler/exe/bundle +10 -8
  16. data/bundler/exe/bundler +1 -1
  17. data/bundler/lib/bundler/.document +1 -0
  18. data/bundler/lib/bundler/build_metadata.rb +4 -12
  19. data/bundler/lib/bundler/cli/add.rb +1 -1
  20. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  21. data/bundler/lib/bundler/cli/cache.rb +3 -8
  22. data/bundler/lib/bundler/cli/check.rb +4 -2
  23. data/bundler/lib/bundler/cli/clean.rb +1 -1
  24. data/bundler/lib/bundler/cli/common.rb +31 -3
  25. data/bundler/lib/bundler/cli/config.rb +10 -1
  26. data/bundler/lib/bundler/cli/console.rb +1 -1
  27. data/bundler/lib/bundler/cli/doctor.rb +25 -6
  28. data/bundler/lib/bundler/cli/exec.rb +5 -10
  29. data/bundler/lib/bundler/cli/fund.rb +36 -0
  30. data/bundler/lib/bundler/cli/gem.rb +219 -28
  31. data/bundler/lib/bundler/cli/info.rb +38 -6
  32. data/bundler/lib/bundler/cli/init.rb +3 -3
  33. data/bundler/lib/bundler/cli/inject.rb +1 -1
  34. data/bundler/lib/bundler/cli/install.rb +25 -54
  35. data/bundler/lib/bundler/cli/issue.rb +5 -4
  36. data/bundler/lib/bundler/cli/list.rb +19 -11
  37. data/bundler/lib/bundler/cli/lock.rb +5 -1
  38. data/bundler/lib/bundler/cli/open.rb +1 -2
  39. data/bundler/lib/bundler/cli/outdated.rb +105 -76
  40. data/bundler/lib/bundler/cli/platform.rb +2 -2
  41. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  42. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  43. data/bundler/lib/bundler/cli/remove.rb +1 -2
  44. data/bundler/lib/bundler/cli/show.rb +2 -2
  45. data/bundler/lib/bundler/cli/update.rb +20 -9
  46. data/bundler/lib/bundler/cli.rb +106 -83
  47. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -23
  48. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  49. data/bundler/lib/bundler/compact_index_client/updater.rb +29 -25
  50. data/bundler/lib/bundler/compact_index_client.rb +3 -9
  51. data/bundler/lib/bundler/current_ruby.rb +17 -6
  52. data/bundler/lib/bundler/definition.rb +297 -396
  53. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  54. data/bundler/lib/bundler/dependency.rb +22 -77
  55. data/bundler/lib/bundler/digest.rb +71 -0
  56. data/bundler/lib/bundler/dsl.rb +76 -83
  57. data/bundler/lib/bundler/endpoint_specification.rb +16 -14
  58. data/bundler/lib/bundler/env.rb +2 -2
  59. data/bundler/lib/bundler/environment_preserver.rb +29 -2
  60. data/bundler/lib/bundler/errors.rb +30 -3
  61. data/bundler/lib/bundler/feature_flag.rb +0 -9
  62. data/bundler/lib/bundler/fetcher/base.rb +7 -9
  63. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -16
  64. data/bundler/lib/bundler/fetcher/downloader.rb +10 -7
  65. data/bundler/lib/bundler/fetcher/index.rb +2 -30
  66. data/bundler/lib/bundler/fetcher.rb +24 -25
  67. data/bundler/lib/bundler/friendly_errors.rb +46 -47
  68. data/bundler/lib/bundler/gem_helper.rb +53 -31
  69. data/bundler/lib/bundler/gem_helpers.rb +43 -24
  70. data/bundler/lib/bundler/gem_version_promoter.rb +10 -20
  71. data/bundler/lib/bundler/graph.rb +1 -1
  72. data/bundler/lib/bundler/index.rb +19 -25
  73. data/bundler/lib/bundler/injector.rb +38 -6
  74. data/bundler/lib/bundler/inline.rb +4 -13
  75. data/bundler/lib/bundler/installer/gem_installer.rb +19 -24
  76. data/bundler/lib/bundler/installer/parallel_installer.rb +46 -25
  77. data/bundler/lib/bundler/installer/standalone.rb +58 -11
  78. data/bundler/lib/bundler/installer.rb +51 -81
  79. data/bundler/lib/bundler/lazy_specification.rb +79 -36
  80. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  81. data/bundler/lib/bundler/lockfile_parser.rb +19 -44
  82. data/bundler/lib/bundler/man/.document +1 -0
  83. data/bundler/{man → lib/bundler/man}/bundle-add.1 +21 -5
  84. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +16 -4
  85. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
  86. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  87. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +7 -1
  88. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +7 -0
  89. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  90. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  91. data/bundler/{man → lib/bundler/man}/bundle-config.1 +65 -47
  92. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +74 -65
  93. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  94. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  95. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  96. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +2 -2
  97. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  98. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +38 -3
  99. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +46 -7
  100. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  101. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  102. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  103. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  104. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  105. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  106. data/bundler/{man → lib/bundler/man}/bundle-install.1 +35 -4
  107. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +33 -5
  108. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  109. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  110. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  111. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  112. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
  113. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
  114. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  115. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  116. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  117. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  118. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  119. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  120. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  121. data/bundler/{man → lib/bundler/man}/bundle-update.1 +5 -5
  122. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +5 -4
  123. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  124. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  125. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  126. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  127. data/bundler/{man → lib/bundler/man}/bundle.1 +15 -10
  128. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +12 -7
  129. data/bundler/{man → lib/bundler/man}/gemfile.5 +106 -80
  130. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +94 -83
  131. data/bundler/{man → lib/bundler/man}/index.txt +4 -0
  132. data/bundler/lib/bundler/match_metadata.rb +13 -0
  133. data/bundler/lib/bundler/match_platform.rb +0 -1
  134. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  135. data/bundler/lib/bundler/mirror.rb +2 -2
  136. data/bundler/lib/bundler/plugin/api/source.rb +25 -9
  137. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  138. data/bundler/lib/bundler/plugin/index.rb +13 -1
  139. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  140. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -5
  141. data/bundler/lib/bundler/plugin/installer.rb +11 -11
  142. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  143. data/bundler/lib/bundler/plugin.rb +58 -11
  144. data/bundler/lib/bundler/process_lock.rb +1 -1
  145. data/bundler/lib/bundler/remote_specification.rb +11 -6
  146. data/bundler/lib/bundler/resolver/base.rb +50 -0
  147. data/bundler/lib/bundler/resolver/spec_group.rb +64 -57
  148. data/bundler/lib/bundler/resolver.rb +234 -230
  149. data/bundler/lib/bundler/retry.rb +2 -2
  150. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  151. data/bundler/lib/bundler/ruby_version.rb +6 -19
  152. data/bundler/lib/bundler/rubygems_ext.rb +194 -33
  153. data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -16
  154. data/bundler/lib/bundler/rubygems_integration.rb +71 -153
  155. data/bundler/lib/bundler/runtime.rb +22 -26
  156. data/bundler/lib/bundler/self_manager.rb +168 -0
  157. data/bundler/lib/bundler/settings.rb +145 -66
  158. data/bundler/lib/bundler/setup.rb +2 -2
  159. data/bundler/lib/bundler/shared_helpers.rb +17 -32
  160. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  161. data/bundler/lib/bundler/source/git/git_proxy.rb +88 -84
  162. data/bundler/lib/bundler/source/git.rb +50 -32
  163. data/bundler/lib/bundler/source/metadata.rb +3 -7
  164. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  165. data/bundler/lib/bundler/source/path.rb +10 -4
  166. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  167. data/bundler/lib/bundler/source/rubygems.rb +201 -179
  168. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  169. data/bundler/lib/bundler/source.rb +25 -5
  170. data/bundler/lib/bundler/source_list.rb +105 -63
  171. data/bundler/lib/bundler/source_map.rb +71 -0
  172. data/bundler/lib/bundler/spec_set.rb +62 -57
  173. data/bundler/lib/bundler/stub_specification.rb +30 -10
  174. data/bundler/lib/bundler/templates/Executable +2 -4
  175. data/bundler/lib/bundler/templates/Executable.bundler +8 -8
  176. data/bundler/lib/bundler/templates/Executable.standalone +2 -4
  177. data/bundler/lib/bundler/templates/Gemfile +0 -2
  178. data/bundler/lib/bundler/templates/gems.rb +0 -3
  179. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  180. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  181. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +12 -1
  182. data/bundler/lib/bundler/templates/newgem/README.md.tt +9 -14
  183. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +32 -5
  184. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  185. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  186. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  187. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +27 -0
  188. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  189. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  190. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  191. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +27 -17
  192. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  193. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  194. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  195. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  196. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  197. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  198. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  199. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  200. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  201. data/bundler/lib/bundler/ui/shell.rb +6 -6
  202. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  203. data/bundler/lib/bundler/vendor/.document +1 -0
  204. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  205. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  206. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  207. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
  208. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
  209. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  210. data/bundler/lib/bundler/vendor/molinillo/LICENSE +9 -0
  211. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  212. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  213. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
  214. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +37 -5
  215. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +34 -28
  216. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  217. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
  218. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
  219. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  220. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  221. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
  222. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  223. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  224. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +9 -7
  225. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
  226. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -3
  227. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  228. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  229. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +10 -5
  230. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
  231. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +28 -9
  232. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +27 -6
  233. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
  234. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  235. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  236. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  237. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +5 -13
  238. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  239. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  240. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  241. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  242. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
  243. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
  244. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
  245. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
  246. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
  247. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  248. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
  249. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
  250. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
  251. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  252. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
  253. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
  254. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
  255. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  256. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  257. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  258. data/bundler/lib/bundler/version.rb +1 -1
  259. data/bundler/lib/bundler/worker.rb +20 -5
  260. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  261. data/bundler/lib/bundler.rb +79 -47
  262. data/hide_lib_for_update/note.txt +0 -4
  263. data/lib/rubygems/available_set.rb +7 -9
  264. data/lib/rubygems/basic_specification.rb +23 -21
  265. data/lib/rubygems/bundler_version_finder.rb +26 -53
  266. data/lib/rubygems/command.rb +48 -45
  267. data/lib/rubygems/command_manager.rb +20 -14
  268. data/lib/rubygems/commands/build_command.rb +47 -27
  269. data/lib/rubygems/commands/cert_command.rb +78 -75
  270. data/lib/rubygems/commands/check_command.rb +20 -22
  271. data/lib/rubygems/commands/cleanup_command.rb +30 -26
  272. data/lib/rubygems/commands/contents_command.rb +16 -18
  273. data/lib/rubygems/commands/dependency_command.rb +39 -51
  274. data/lib/rubygems/commands/environment_command.rb +11 -10
  275. data/lib/rubygems/commands/fetch_command.rb +33 -16
  276. data/lib/rubygems/commands/generate_index_command.rb +17 -19
  277. data/lib/rubygems/commands/help_command.rb +6 -6
  278. data/lib/rubygems/commands/info_command.rb +10 -7
  279. data/lib/rubygems/commands/install_command.rb +29 -27
  280. data/lib/rubygems/commands/list_command.rb +9 -8
  281. data/lib/rubygems/commands/lock_command.rb +5 -7
  282. data/lib/rubygems/commands/mirror_command.rb +3 -5
  283. data/lib/rubygems/commands/open_command.rb +10 -14
  284. data/lib/rubygems/commands/outdated_command.rb +5 -7
  285. data/lib/rubygems/commands/owner_command.rb +26 -16
  286. data/lib/rubygems/commands/pristine_command.rb +61 -49
  287. data/lib/rubygems/commands/push_command.rb +22 -59
  288. data/lib/rubygems/commands/query_command.rb +21 -351
  289. data/lib/rubygems/commands/rdoc_command.rb +23 -25
  290. data/lib/rubygems/commands/search_command.rb +8 -8
  291. data/lib/rubygems/commands/server_command.rb +16 -77
  292. data/lib/rubygems/commands/setup_command.rb +255 -229
  293. data/lib/rubygems/commands/signin_command.rb +9 -11
  294. data/lib/rubygems/commands/signout_command.rb +7 -9
  295. data/lib/rubygems/commands/sources_command.rb +27 -25
  296. data/lib/rubygems/commands/specification_command.rb +25 -21
  297. data/lib/rubygems/commands/stale_command.rb +3 -5
  298. data/lib/rubygems/commands/uninstall_command.rb +41 -43
  299. data/lib/rubygems/commands/unpack_command.rb +13 -15
  300. data/lib/rubygems/commands/update_command.rb +132 -74
  301. data/lib/rubygems/commands/which_command.rb +7 -9
  302. data/lib/rubygems/commands/yank_command.rb +16 -19
  303. data/lib/rubygems/compatibility.rb +4 -2
  304. data/lib/rubygems/config_file.rb +42 -26
  305. data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
  306. data/lib/rubygems/core_ext/kernel_require.rb +6 -3
  307. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  308. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  309. data/lib/rubygems/defaults.rb +108 -32
  310. data/lib/rubygems/dependency.rb +21 -22
  311. data/lib/rubygems/dependency_installer.rb +19 -91
  312. data/lib/rubygems/dependency_list.rb +13 -15
  313. data/lib/rubygems/deprecate.rb +102 -8
  314. data/lib/rubygems/doctor.rb +22 -22
  315. data/lib/rubygems/errors.rb +6 -21
  316. data/lib/rubygems/exceptions.rb +33 -34
  317. data/lib/rubygems/ext/build_error.rb +2 -0
  318. data/lib/rubygems/ext/builder.rb +48 -54
  319. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +23 -0
  320. data/lib/rubygems/ext/cargo_builder.rb +321 -0
  321. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  322. data/lib/rubygems/ext/configure_builder.rb +5 -8
  323. data/lib/rubygems/ext/ext_conf_builder.rb +42 -66
  324. data/lib/rubygems/ext/rake_builder.rb +7 -10
  325. data/lib/rubygems/ext.rb +7 -6
  326. data/lib/rubygems/gem_runner.rb +15 -26
  327. data/lib/rubygems/gemcutter_utilities.rb +153 -32
  328. data/lib/rubygems/indexer.rb +30 -49
  329. data/lib/rubygems/install_default_message.rb +2 -2
  330. data/lib/rubygems/install_message.rb +2 -2
  331. data/lib/rubygems/install_update_options.rb +73 -64
  332. data/lib/rubygems/installer.rb +194 -151
  333. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  334. data/lib/rubygems/local_remote_options.rb +22 -24
  335. data/lib/rubygems/mock_gem_ui.rb +2 -8
  336. data/lib/rubygems/name_tuple.rb +9 -14
  337. data/lib/rubygems/openssl.rb +7 -0
  338. data/lib/rubygems/optparse/.document +1 -0
  339. data/lib/rubygems/optparse/COPYING +56 -0
  340. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  341. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  342. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  343. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  344. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  345. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  346. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  347. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  348. data/lib/rubygems/optparse/lib/optparse.rb +2303 -0
  349. data/lib/rubygems/optparse.rb +3 -0
  350. data/lib/rubygems/package/digest_io.rb +0 -2
  351. data/lib/rubygems/package/file_source.rb +2 -4
  352. data/lib/rubygems/package/io_source.rb +4 -2
  353. data/lib/rubygems/package/old.rb +9 -11
  354. data/lib/rubygems/package/tar_header.rb +54 -56
  355. data/lib/rubygems/package/tar_reader/entry.rb +2 -5
  356. data/lib/rubygems/package/tar_reader.rb +1 -4
  357. data/lib/rubygems/package/tar_writer.rb +8 -18
  358. data/lib/rubygems/package.rb +101 -117
  359. data/lib/rubygems/package_task.rb +5 -11
  360. data/lib/rubygems/path_support.rb +2 -9
  361. data/lib/rubygems/platform.rb +101 -76
  362. data/lib/rubygems/psych_tree.rb +1 -3
  363. data/lib/rubygems/query_utils.rb +351 -0
  364. data/lib/rubygems/rdoc.rb +2 -14
  365. data/lib/rubygems/remote_fetcher.rb +48 -74
  366. data/lib/rubygems/request/connection_pools.rb +6 -10
  367. data/lib/rubygems/request/http_pool.rb +2 -4
  368. data/lib/rubygems/request/https_pool.rb +0 -2
  369. data/lib/rubygems/request.rb +26 -31
  370. data/lib/rubygems/request_set/gem_dependency_api.rb +23 -25
  371. data/lib/rubygems/request_set/lockfile/parser.rb +26 -28
  372. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -7
  373. data/lib/rubygems/request_set/lockfile.rb +17 -21
  374. data/lib/rubygems/request_set.rb +27 -40
  375. data/lib/rubygems/requirement.rb +28 -48
  376. data/lib/rubygems/resolver/activation_request.rb +12 -6
  377. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  378. data/lib/rubygems/resolver/api_set.rb +32 -25
  379. data/lib/rubygems/resolver/api_specification.rb +29 -15
  380. data/lib/rubygems/resolver/best_set.rb +7 -9
  381. data/lib/rubygems/resolver/composed_set.rb +3 -5
  382. data/lib/rubygems/resolver/conflict.rb +12 -14
  383. data/lib/rubygems/resolver/current_set.rb +0 -2
  384. data/lib/rubygems/resolver/dependency_request.rb +3 -5
  385. data/lib/rubygems/resolver/git_set.rb +2 -4
  386. data/lib/rubygems/resolver/git_specification.rb +6 -8
  387. data/lib/rubygems/resolver/index_set.rb +4 -6
  388. data/lib/rubygems/resolver/index_specification.rb +38 -7
  389. data/lib/rubygems/resolver/installed_specification.rb +4 -6
  390. data/lib/rubygems/resolver/installer_set.rb +66 -24
  391. data/lib/rubygems/resolver/local_specification.rb +2 -4
  392. data/lib/rubygems/resolver/lock_set.rb +6 -8
  393. data/lib/rubygems/resolver/lock_specification.rb +4 -6
  394. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  395. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  396. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  397. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  398. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  399. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  400. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  401. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  402. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  403. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  404. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  405. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  406. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +41 -8
  407. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  408. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  409. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  410. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  411. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  412. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  413. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  414. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  415. data/lib/rubygems/resolver/molinillo.rb +1 -1
  416. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  417. data/lib/rubygems/resolver/set.rb +0 -3
  418. data/lib/rubygems/resolver/source_set.rb +0 -2
  419. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  420. data/lib/rubygems/resolver/specification.rb +14 -4
  421. data/lib/rubygems/resolver/stats.rb +0 -2
  422. data/lib/rubygems/resolver/vendor_set.rb +1 -3
  423. data/lib/rubygems/resolver/vendor_specification.rb +3 -5
  424. data/lib/rubygems/resolver.rb +53 -51
  425. data/lib/rubygems/s3_uri_signer.rb +7 -15
  426. data/lib/rubygems/safe_yaml.rb +14 -16
  427. data/lib/rubygems/security/policies.rb +11 -11
  428. data/lib/rubygems/security/policy.rb +25 -29
  429. data/lib/rubygems/security/signer.rb +13 -16
  430. data/lib/rubygems/security/trust_dir.rb +4 -5
  431. data/lib/rubygems/security.rb +103 -69
  432. data/lib/rubygems/security_option.rb +7 -7
  433. data/lib/rubygems/source/git.rb +30 -30
  434. data/lib/rubygems/source/installed.rb +1 -3
  435. data/lib/rubygems/source/local.rb +4 -6
  436. data/lib/rubygems/source/lock.rb +0 -2
  437. data/lib/rubygems/source/specific_file.rb +1 -3
  438. data/lib/rubygems/source/vendor.rb +0 -2
  439. data/lib/rubygems/source.rb +44 -38
  440. data/lib/rubygems/source_list.rb +9 -16
  441. data/lib/rubygems/spec_fetcher.rb +49 -48
  442. data/lib/rubygems/specification.rb +338 -295
  443. data/lib/rubygems/specification_policy.rb +112 -61
  444. data/lib/rubygems/stub_specification.rb +21 -28
  445. data/lib/rubygems/text.rb +21 -20
  446. data/lib/rubygems/tsort/.document +1 -0
  447. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  448. data/lib/rubygems/tsort/lib/tsort.rb +454 -0
  449. data/lib/rubygems/tsort.rb +3 -0
  450. data/lib/rubygems/uninstaller.rb +98 -45
  451. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  452. data/lib/rubygems/uri.rb +126 -0
  453. data/lib/rubygems/uri_formatter.rb +2 -3
  454. data/lib/rubygems/user_interaction.rb +43 -54
  455. data/lib/rubygems/util/licenses.rb +115 -10
  456. data/lib/rubygems/util/list.rb +0 -2
  457. data/lib/rubygems/util.rb +18 -12
  458. data/lib/rubygems/validator.rb +6 -8
  459. data/lib/rubygems/version.rb +29 -20
  460. data/lib/rubygems/version_option.rb +11 -5
  461. data/lib/rubygems.rb +192 -289
  462. data/rubygems-update.gemspec +4 -4
  463. data/setup.rb +11 -22
  464. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  465. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  466. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  467. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  468. data/test/rubygems/encrypted_private_key.pem +26 -26
  469. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +380 -314
  470. data/{lib → test}/rubygems/installer_test_case.rb +38 -24
  471. data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
  472. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  473. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  474. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  475. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  476. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  477. data/test/rubygems/private_ec_key.pem +9 -0
  478. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  479. data/test/rubygems/rubygems_plugin.rb +2 -4
  480. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  481. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -6
  482. data/test/rubygems/test_bundled_ca.rb +43 -50
  483. data/test/rubygems/test_config.rb +5 -7
  484. data/test/rubygems/test_deprecate.rb +87 -10
  485. data/test/rubygems/test_exit.rb +11 -0
  486. data/test/rubygems/test_gem.rb +719 -639
  487. data/test/rubygems/test_gem_available_set.rb +24 -26
  488. data/test/rubygems/test_gem_bundler_version_finder.rb +37 -44
  489. data/test/rubygems/test_gem_command.rb +78 -49
  490. data/test/rubygems/test_gem_command_manager.rb +98 -35
  491. data/test/rubygems/test_gem_commands_build_command.rb +275 -57
  492. data/test/rubygems/test_gem_commands_cert_command.rb +180 -125
  493. data/test/rubygems/test_gem_commands_check_command.rb +9 -11
  494. data/test/rubygems/test_gem_commands_cleanup_command.rb +78 -69
  495. data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
  496. data/test/rubygems/test_gem_commands_dependency_command.rb +38 -40
  497. data/test/rubygems/test_gem_commands_environment_command.rb +60 -38
  498. data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
  499. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -14
  500. data/test/rubygems/test_gem_commands_help_command.rb +34 -16
  501. data/test/rubygems/test_gem_commands_info_command.rb +33 -9
  502. data/test/rubygems/test_gem_commands_install_command.rb +401 -198
  503. data/test/rubygems/test_gem_commands_list_command.rb +5 -7
  504. data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
  505. data/test/rubygems/test_gem_commands_mirror.rb +3 -5
  506. data/test/rubygems/test_gem_commands_open_command.rb +16 -19
  507. data/test/rubygems/test_gem_commands_outdated_command.rb +23 -7
  508. data/test/rubygems/test_gem_commands_owner_command.rb +100 -46
  509. data/test/rubygems/test_gem_commands_pristine_command.rb +131 -99
  510. data/test/rubygems/test_gem_commands_push_command.rb +134 -66
  511. data/test/rubygems/test_gem_commands_query_command.rb +91 -91
  512. data/test/rubygems/test_gem_commands_search_command.rb +2 -4
  513. data/test/rubygems/test_gem_commands_server_command.rb +6 -50
  514. data/test/rubygems/test_gem_commands_setup_command.rb +288 -179
  515. data/test/rubygems/test_gem_commands_signin_command.rb +162 -28
  516. data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
  517. data/test/rubygems/test_gem_commands_sources_command.rb +139 -32
  518. data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
  519. data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
  520. data/test/rubygems/test_gem_commands_uninstall_command.rb +80 -82
  521. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
  522. data/test/rubygems/test_gem_commands_update_command.rb +335 -88
  523. data/test/rubygems/test_gem_commands_which_command.rb +12 -14
  524. data/test/rubygems/test_gem_commands_yank_command.rb +80 -44
  525. data/test/rubygems/test_gem_config_file.rb +114 -97
  526. data/test/rubygems/test_gem_dependency.rb +87 -87
  527. data/test/rubygems/test_gem_dependency_installer.rb +277 -391
  528. data/test/rubygems/test_gem_dependency_list.rb +57 -59
  529. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
  530. data/test/rubygems/test_gem_doctor.rb +73 -47
  531. data/test/rubygems/test_gem_ext_builder.rb +115 -109
  532. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  533. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +243 -0
  534. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +10 -0
  535. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +21 -0
  536. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +10 -0
  537. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +27 -0
  538. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  539. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +243 -0
  540. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  541. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +21 -0
  542. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  543. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +39 -0
  544. data/test/rubygems/test_gem_ext_cargo_builder.rb +178 -0
  545. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  546. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +75 -0
  547. data/test/rubygems/test_gem_ext_cmake_builder.rb +31 -38
  548. data/test/rubygems/test_gem_ext_configure_builder.rb +23 -39
  549. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +66 -82
  550. data/test/rubygems/test_gem_ext_rake_builder.rb +49 -32
  551. data/test/rubygems/test_gem_gem_runner.rb +51 -8
  552. data/test/rubygems/test_gem_gemcutter_utilities.rb +87 -76
  553. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
  554. data/test/rubygems/test_gem_indexer.rb +62 -64
  555. data/test/rubygems/test_gem_install_update_options.rb +31 -21
  556. data/test/rubygems/test_gem_installer.rb +798 -491
  557. data/test/rubygems/test_gem_local_remote_options.rb +11 -13
  558. data/test/rubygems/test_gem_name_tuple.rb +4 -6
  559. data/test/rubygems/test_gem_package.rb +318 -283
  560. data/test/rubygems/test_gem_package_old.rb +18 -20
  561. data/test/rubygems/test_gem_package_tar_header.rb +64 -47
  562. data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
  563. data/test/rubygems/test_gem_package_tar_reader_entry.rb +18 -20
  564. data/test/rubygems/test_gem_package_tar_writer.rb +96 -100
  565. data/test/rubygems/test_gem_package_task.rb +58 -25
  566. data/test/rubygems/test_gem_path_support.rb +15 -21
  567. data/test/rubygems/test_gem_platform.rb +354 -201
  568. data/test/rubygems/test_gem_rdoc.rb +19 -21
  569. data/test/rubygems/test_gem_remote_fetcher.rb +376 -337
  570. data/test/rubygems/test_gem_request.rb +114 -86
  571. data/test/rubygems/test_gem_request_connection_pools.rb +30 -34
  572. data/test/rubygems/test_gem_request_set.rb +123 -124
  573. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +222 -226
  574. data/test/rubygems/test_gem_request_set_lockfile.rb +93 -95
  575. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -70
  576. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -138
  577. data/test/rubygems/test_gem_requirement.rb +133 -54
  578. data/test/rubygems/test_gem_resolver.rb +149 -117
  579. data/test/rubygems/test_gem_resolver_activation_request.rb +6 -8
  580. data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
  581. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
  582. data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
  583. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
  584. data/test/rubygems/test_gem_resolver_conflict.rb +12 -14
  585. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
  586. data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
  587. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -23
  588. data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
  589. data/test/rubygems/test_gem_resolver_index_specification.rb +16 -18
  590. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -7
  591. data/test/rubygems/test_gem_resolver_installer_set.rb +104 -44
  592. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
  593. data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
  594. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
  595. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
  596. data/test/rubygems/test_gem_resolver_specification.rb +8 -12
  597. data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
  598. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
  599. data/test/rubygems/test_gem_security.rb +104 -78
  600. data/test/rubygems/test_gem_security_policy.rb +92 -97
  601. data/test/rubygems/test_gem_security_signer.rb +45 -47
  602. data/test/rubygems/test_gem_security_trust_dir.rb +12 -14
  603. data/test/rubygems/test_gem_silent_ui.rb +46 -42
  604. data/test/rubygems/test_gem_source.rb +53 -52
  605. data/test/rubygems/test_gem_source_fetch_problem.rb +16 -8
  606. data/test/rubygems/test_gem_source_git.rb +69 -69
  607. data/test/rubygems/test_gem_source_installed.rb +16 -18
  608. data/test/rubygems/test_gem_source_list.rb +5 -6
  609. data/test/rubygems/test_gem_source_local.rb +15 -17
  610. data/test/rubygems/test_gem_source_lock.rb +31 -33
  611. data/test/rubygems/test_gem_source_specific_file.rb +18 -20
  612. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  613. data/test/rubygems/test_gem_source_vendor.rb +13 -15
  614. data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
  615. data/test/rubygems/test_gem_specification.rb +888 -1024
  616. data/test/rubygems/test_gem_stream_ui.rb +23 -23
  617. data/test/rubygems/test_gem_stub_specification.rb +39 -57
  618. data/test/rubygems/test_gem_text.rb +8 -4
  619. data/test/rubygems/test_gem_uninstaller.rb +233 -104
  620. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
  621. data/test/rubygems/test_gem_uri.rb +39 -0
  622. data/test/rubygems/test_gem_uri_formatter.rb +14 -16
  623. data/test/rubygems/test_gem_util.rb +37 -35
  624. data/test/rubygems/test_gem_validator.rb +10 -12
  625. data/test/rubygems/test_gem_version.rb +31 -31
  626. data/test/rubygems/test_gem_version_option.rb +16 -18
  627. data/test/rubygems/test_kernel.rb +46 -60
  628. data/test/rubygems/test_project_sanity.rb +8 -3
  629. data/test/rubygems/test_remote_fetch_error.rb +7 -9
  630. data/test/rubygems/test_require.rb +240 -167
  631. data/test/rubygems/test_rubygems.rb +74 -0
  632. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +30 -39
  633. data/test/test_changelog_generator.rb +17 -0
  634. metadata +158 -146
  635. data/.bundle/config +0 -2
  636. data/.rubocop.yml +0 -91
  637. data/Gemfile +0 -8
  638. data/Gemfile.lock +0 -43
  639. data/Rakefile +0 -428
  640. data/bundler/CODE_OF_CONDUCT.md +0 -136
  641. data/bundler/lib/bundler/gemdeps.rb +0 -29
  642. data/bundler/lib/bundler/psyched_yaml.rb +0 -37
  643. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  644. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  645. data/bundler/man/bundle-add.1.txt +0 -58
  646. data/bundler/man/bundle-binstubs.1.txt +0 -48
  647. data/bundler/man/bundle-cache.1.txt +0 -78
  648. data/bundler/man/bundle-check.1.txt +0 -33
  649. data/bundler/man/bundle-clean.1.txt +0 -26
  650. data/bundler/man/bundle-config.1.txt +0 -528
  651. data/bundler/man/bundle-doctor.1.txt +0 -44
  652. data/bundler/man/bundle-exec.1.txt +0 -178
  653. data/bundler/man/bundle-gem.1.txt +0 -91
  654. data/bundler/man/bundle-info.1.txt +0 -21
  655. data/bundler/man/bundle-init.1.txt +0 -34
  656. data/bundler/man/bundle-inject.1.txt +0 -32
  657. data/bundler/man/bundle-install.1.txt +0 -401
  658. data/bundler/man/bundle-list.1.txt +0 -43
  659. data/bundler/man/bundle-lock.1.txt +0 -93
  660. data/bundler/man/bundle-open.1.txt +0 -29
  661. data/bundler/man/bundle-outdated.1.txt +0 -131
  662. data/bundler/man/bundle-platform.1.txt +0 -57
  663. data/bundler/man/bundle-pristine.1.txt +0 -44
  664. data/bundler/man/bundle-remove.1.txt +0 -34
  665. data/bundler/man/bundle-show.1.txt +0 -27
  666. data/bundler/man/bundle-update.1.txt +0 -390
  667. data/bundler/man/bundle-viz.1.txt +0 -39
  668. data/bundler/man/bundle.1.txt +0 -116
  669. data/bundler/man/gemfile.5.txt +0 -649
  670. data/lib/rubygems/psych_additions.rb +0 -10
  671. data/lib/rubygems/server.rb +0 -879
  672. data/lib/rubygems/source_local.rb +0 -7
  673. data/lib/rubygems/source_specific_file.rb +0 -6
  674. data/lib/rubygems/syck_hack.rb +0 -79
  675. data/lib/rubygems/uri_parser.rb +0 -36
  676. data/lib/rubygems/uri_parsing.rb +0 -23
  677. data/lib/ubygems.rb +0 -14
  678. data/test/rubygems/bogussources.rb +0 -9
  679. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  680. data/test/rubygems/test_gem_server.rb +0 -612
  681. data/tmp/.keep +0 -0
  682. data/util/CL2notes +0 -55
  683. data/util/bisect +0 -10
  684. data/util/ci.sh +0 -62
  685. data/util/cops/deprecations.rb +0 -52
  686. data/util/create_certs.rb +0 -171
  687. data/util/create_certs.sh +0 -27
  688. data/util/create_encrypted_key.rb +0 -16
  689. data/util/generate_spdx_license_list.rb +0 -63
  690. data/util/patch_with_prs.rb +0 -77
  691. data/util/rubocop +0 -8
  692. data/util/update_bundled_ca_certificates.rb +0 -137
  693. data/util/update_changelog.rb +0 -64
  694. /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  695. /data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  696. /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  697. /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  698. /data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  699. /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  700. /data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  701. /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  702. /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  703. /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
@@ -1,21 +1,15 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
-
4
- require 'webrick'
5
- begin
6
- require 'webrick/https'
7
- rescue LoadError => e
8
- raise unless (e.respond_to?(:path) && e.path == 'openssl') ||
9
- e.message =~ / -- openssl$/
10
- end
2
+ require_relative "helper"
3
+
4
+ require "webrick"
5
+ require "webrick/https" if Gem::HAVE_OPENSSL
11
6
 
12
- unless defined?(OpenSSL::SSL)
13
- warn 'Skipping Gem::Request tests. openssl not found.'
7
+ unless Gem::HAVE_OPENSSL
8
+ warn "Skipping Gem::RemoteFetcher tests. openssl not found."
14
9
  end
15
10
 
16
- require 'rubygems/remote_fetcher'
17
- require 'rubygems/package'
18
- require 'minitest/mock'
11
+ require "rubygems/remote_fetcher"
12
+ require "rubygems/package"
19
13
 
20
14
  # = Testing Proxy Settings
21
15
  #
@@ -32,7 +26,6 @@ require 'minitest/mock'
32
26
  # proxy is configured.
33
27
 
34
28
  class TestGemRemoteFetcher < Gem::TestCase
35
-
36
29
  include Gem::DefaultUserInteraction
37
30
 
38
31
  SERVER_DATA = <<-EOY.freeze
@@ -76,14 +69,12 @@ gems:
76
69
  dependencies: []
77
70
  EOY
78
71
 
79
- PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, '0.4.2')
80
-
81
- DIR = File.expand_path(File.dirname(__FILE__))
72
+ PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, "0.4.2")
82
73
 
83
74
  # Generated via:
84
75
  # x = OpenSSL::PKey::DH.new(2048) # wait a while...
85
76
  # x.to_s => pem
86
- TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
77
+ TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_END_OF_PEM_
87
78
  -----BEGIN DH PARAMETERS-----
88
79
  MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
89
80
  G1JKhmGUiEDyIW7idsBpe4sX/Wqjnp48Lr8IeI/SlEzLdoGpf05iRYXC8Cm9o8aM
@@ -92,7 +83,7 @@ cfmVgoSEAo9YLBpzoji2jHkO7Q5IPt4zxbTdlmmGFLc/GO9q7LGHhC+rcMcNTGsM
92
83
  NP0fuvVAIB158VnQ0liHSwcl6+9vE1mL0Jo/qEXQxl0+UdKDjaGfTsn6HIrwTnmJ
93
84
  PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
94
85
  -----END DH PARAMETERS-----
95
- _end_of_pem_
86
+ _END_OF_PEM_
96
87
 
97
88
  def setup
98
89
  @proxies = %w[https_proxy http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
@@ -100,27 +91,24 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
100
91
  @proxies.each {|k| ENV[k] = nil }
101
92
 
102
93
  super
103
- self.class.start_servers
104
- self.class.enable_yaml = true
105
- self.class.enable_zip = false
94
+ start_servers
95
+ self.enable_yaml = true
96
+ self.enable_zip = false
106
97
 
107
- base_server_uri = "http://localhost:#{self.class.normal_server_port}"
108
- @proxy_uri = "http://localhost:#{self.class.proxy_server_port}"
98
+ base_server_uri = "http://localhost:#{normal_server_port}"
99
+ @proxy_uri = "http://localhost:#{proxy_server_port}"
109
100
 
110
101
  @server_uri = base_server_uri + "/yaml"
111
102
  @server_z_uri = base_server_uri + "/yaml.Z"
112
103
 
113
- # REFACTOR: copied from test_gem_dependency_installer.rb
114
- @gems_dir = File.join @tempdir, 'gems'
115
104
  @cache_dir = File.join @gemhome, "cache"
116
- FileUtils.mkdir @gems_dir
117
105
 
118
106
  # TODO: why does the remote fetcher need it written to disk?
119
- @a1, @a1_gem = util_gem 'a', '1' do |s|
120
- s.executables << 'a_bin'
107
+ @a1, @a1_gem = util_gem "a", "1" do |s|
108
+ s.executables << "a_bin"
121
109
  end
122
110
 
123
- @a1.loaded_from = File.join(@gemhome, 'specifications', @a1.full_name)
111
+ @a1.loaded_from = File.join(@gemhome, "specifications", @a1.full_name)
124
112
 
125
113
  Gem::RemoteFetcher.fetcher = nil
126
114
  @stub_ui = Gem::MockGemUi.new
@@ -129,7 +117,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
129
117
 
130
118
  def teardown
131
119
  @fetcher.close_all
132
- self.class.stop_servers
120
+ stop_servers
133
121
  super
134
122
  Gem.configuration[:http_proxy] = nil
135
123
  @proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
@@ -142,7 +130,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
142
130
  end
143
131
 
144
132
  def test_self_fetcher_with_proxy
145
- proxy_uri = 'http://proxy.example.com'
133
+ proxy_uri = "http://proxy.example.com"
146
134
  Gem.configuration[:http_proxy] = proxy_uri
147
135
  Gem::RemoteFetcher.fetcher = nil
148
136
 
@@ -153,69 +141,64 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
153
141
  assert_equal proxy_uri, fetcher.instance_variable_get(:@proxy).to_s
154
142
  end
155
143
 
156
- def test_fetch_size_bad_uri
144
+ def test_fetch_path_bad_uri
157
145
  fetcher = Gem::RemoteFetcher.new nil
158
146
  @fetcher = fetcher
159
147
 
160
- e = assert_raises ArgumentError do
161
- Gem::Deprecate.skip_during do
162
- fetcher.fetch_size 'gems.example.com/yaml'
163
- end
164
- end
165
-
166
- assert_equal 'uri scheme is invalid: nil', e.message
167
- end
168
-
169
- def test_fetch_size_socket_error
170
- fetcher = Gem::RemoteFetcher.new nil
171
- @fetcher = fetcher
172
- def fetcher.request(uri, request_class, last_modified = nil)
173
- raise SocketError, "oops"
174
- end
175
-
176
- uri = 'http://gems.example.com/yaml'
177
- e = assert_raises Gem::RemoteFetcher::FetchError do
178
- Gem::Deprecate.skip_during do
179
- fetcher.fetch_size uri
180
- end
148
+ e = assert_raise ArgumentError do
149
+ @fetcher.fetch_path("gems.example.com/yaml", nil, true)
181
150
  end
182
151
 
183
- assert_equal "SocketError: oops (#{uri})", e.message
152
+ assert_equal "uri scheme is invalid: nil", e.message
184
153
  end
185
154
 
186
155
  def test_no_proxy
187
156
  use_ui @stub_ui do
188
157
  assert_data_from_server @fetcher.fetch_path(@server_uri)
189
- Gem::Deprecate.skip_during do
190
- assert_equal SERVER_DATA.size, @fetcher.fetch_size(@server_uri)
191
- end
158
+ response = @fetcher.fetch_path(@server_uri, nil, true)
159
+ assert_equal SERVER_DATA.size, response["content-length"].to_i
192
160
  end
193
161
  end
194
162
 
195
163
  def test_cache_update_path
196
- uri = URI 'http://example/file'
197
- path = File.join @tempdir, 'file'
164
+ uri = URI "http://example/file"
165
+ path = File.join @tempdir, "file"
198
166
 
199
- fetcher = util_fuck_with_fetcher 'hello'
167
+ fetcher = util_fuck_with_fetcher "hello"
200
168
 
201
169
  data = fetcher.cache_update_path uri, path
202
170
 
203
- assert_equal 'hello', data
171
+ assert_equal "hello", data
172
+
173
+ assert_equal "hello", File.read(path)
174
+ end
175
+
176
+ 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"
180
+ data = String.new("\xC8").force_encoding(Encoding::BINARY)
204
181
 
205
- assert_equal 'hello', File.read(path)
182
+ fetcher = util_fuck_with_fetcher data
183
+
184
+ written_data = fetcher.cache_update_path uri, path
185
+
186
+ assert_equal data, written_data
187
+ assert_equal data, File.binread(path)
188
+ end
206
189
  end
207
190
 
208
191
  def test_cache_update_path_no_update
209
- uri = URI 'http://example/file'
210
- path = File.join @tempdir, 'file'
192
+ uri = URI "http://example/file"
193
+ path = File.join @tempdir, "file"
211
194
 
212
- fetcher = util_fuck_with_fetcher 'hello'
195
+ fetcher = util_fuck_with_fetcher "hello"
213
196
 
214
197
  data = fetcher.cache_update_path uri, path, false
215
198
 
216
- assert_equal 'hello', data
199
+ assert_equal "hello", data
217
200
 
218
- refute_path_exists path
201
+ assert_path_not_exist path
219
202
  end
220
203
 
221
204
  def util_fuck_with_fetcher(data, blow = false)
@@ -236,7 +219,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
236
219
  @test_data
237
220
  end
238
221
 
239
- raise Gem::RemoteFetcher::FetchError.new("haha!", nil)
222
+ raise Gem::RemoteFetcher::FetchError.new("haha!", "")
240
223
  end
241
224
  end
242
225
 
@@ -245,14 +228,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
245
228
 
246
229
  def test_download
247
230
  a1_data = nil
248
- File.open @a1_gem, 'rb' do |fp|
231
+ File.open @a1_gem, "rb" do |fp|
249
232
  a1_data = fp.read
250
233
  end
251
234
 
252
235
  fetcher = util_fuck_with_fetcher a1_data
253
236
 
254
237
  a1_cache_gem = @a1.cache_file
255
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://gems.example.com')
238
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://gems.example.com")
256
239
  assert_equal("http://gems.example.com/gems/a-1.gem",
257
240
  fetcher.instance_variable_get(:@test_arg).to_s)
258
241
  assert File.exist?(a1_cache_gem)
@@ -260,29 +243,59 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
260
243
 
261
244
  def test_download_with_auth
262
245
  a1_data = nil
263
- File.open @a1_gem, 'rb' do |fp|
246
+ File.open @a1_gem, "rb" do |fp|
264
247
  a1_data = fp.read
265
248
  end
266
249
 
267
250
  fetcher = util_fuck_with_fetcher a1_data
268
251
 
269
252
  a1_cache_gem = @a1.cache_file
270
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://user:password@gems.example.com')
253
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:password@gems.example.com")
271
254
  assert_equal("http://user:password@gems.example.com/gems/a-1.gem",
272
255
  fetcher.instance_variable_get(:@test_arg).to_s)
273
256
  assert File.exist?(a1_cache_gem)
274
257
  end
275
258
 
259
+ def test_download_with_token
260
+ a1_data = nil
261
+ File.open @a1_gem, "rb" do |fp|
262
+ a1_data = fp.read
263
+ end
264
+
265
+ fetcher = util_fuck_with_fetcher a1_data
266
+
267
+ a1_cache_gem = @a1.cache_file
268
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://token@gems.example.com")
269
+ assert_equal("http://token@gems.example.com/gems/a-1.gem",
270
+ fetcher.instance_variable_get(:@test_arg).to_s)
271
+ assert File.exist?(a1_cache_gem)
272
+ end
273
+
274
+ def test_download_with_x_oauth_basic
275
+ a1_data = nil
276
+ File.open @a1_gem, "rb" do |fp|
277
+ a1_data = fp.read
278
+ end
279
+
280
+ fetcher = util_fuck_with_fetcher a1_data
281
+
282
+ 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("http://token:x-oauth-basic@gems.example.com/gems/a-1.gem",
285
+ fetcher.instance_variable_get(:@test_arg).to_s)
286
+ assert File.exist?(a1_cache_gem)
287
+ end
288
+
276
289
  def test_download_with_encoded_auth
277
290
  a1_data = nil
278
- File.open @a1_gem, 'rb' do |fp|
291
+ File.open @a1_gem, "rb" do |fp|
279
292
  a1_data = fp.read
280
293
  end
281
294
 
282
295
  fetcher = util_fuck_with_fetcher a1_data
283
296
 
284
297
  a1_cache_gem = @a1.cache_file
285
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://user:%25pas%25sword@gems.example.com')
298
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:%25pas%25sword@gems.example.com")
286
299
  assert_equal("http://user:%25pas%25sword@gems.example.com/gems/a-1.gem",
287
300
  fetcher.instance_variable_get(:@test_arg).to_s)
288
301
  assert File.exist?(a1_cache_gem)
@@ -293,7 +306,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
293
306
 
294
307
  inst = Gem::RemoteFetcher.fetcher
295
308
 
296
- assert_equal @a1.cache_file, inst.download(@a1, 'http://gems.example.com')
309
+ assert_equal @a1.cache_file, inst.download(@a1, "http://gems.example.com")
297
310
  end
298
311
 
299
312
  def test_download_local
@@ -309,7 +322,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
309
322
  end
310
323
 
311
324
  def test_download_local_space
312
- space_path = File.join @tempdir, 'space path'
325
+ space_path = File.join @tempdir, "space path"
313
326
  FileUtils.mkdir space_path
314
327
  FileUtils.mv @a1_gem, space_path
315
328
  local_path = File.join space_path, @a1.file_name
@@ -323,17 +336,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
323
336
  end
324
337
 
325
338
  def test_download_install_dir
326
- a1_data = File.open @a1_gem, 'rb' do |fp|
339
+ a1_data = File.open @a1_gem, "rb" do |fp|
327
340
  fp.read
328
341
  end
329
342
 
330
343
  fetcher = util_fuck_with_fetcher a1_data
331
344
 
332
- install_dir = File.join @tempdir, 'more_gems'
345
+ install_dir = File.join @tempdir, "more_gems"
333
346
 
334
347
  a1_cache_gem = File.join install_dir, "cache", @a1.file_name
335
348
  FileUtils.mkdir_p(File.dirname(a1_cache_gem))
336
- actual = fetcher.download(@a1, 'http://gems.example.com', install_dir)
349
+ actual = fetcher.download(@a1, "http://gems.example.com", install_dir)
337
350
 
338
351
  assert_equal a1_cache_gem, actual
339
352
  assert_equal("http://gems.example.com/gems/a-1.gem",
@@ -348,6 +361,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
348
361
  local_path = File.join @tempdir, @a1.file_name
349
362
  inst = nil
350
363
  FileUtils.chmod 0555, @a1.cache_dir
364
+ FileUtils.mkdir_p File.join(Gem.user_dir, "cache") rescue nil
365
+ FileUtils.chmod 0555, File.join(Gem.user_dir, "cache")
351
366
 
352
367
  Dir.chdir @tempdir do
353
368
  inst = Gem::RemoteFetcher.fetcher
@@ -356,6 +371,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
356
371
  assert_equal(File.join(@tempdir, @a1.file_name),
357
372
  inst.download(@a1, local_path))
358
373
  ensure
374
+ FileUtils.chmod 0755, File.join(Gem.user_dir, "cache")
359
375
  FileUtils.chmod 0755, @a1.cache_dir
360
376
  end
361
377
 
@@ -364,7 +380,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
364
380
  FileUtils.chmod 0555, @gemhome
365
381
 
366
382
  fetcher = util_fuck_with_fetcher File.read(@a1_gem)
367
- fetcher.download(@a1, 'http://gems.example.com')
383
+ fetcher.download(@a1, "http://gems.example.com")
368
384
  a1_cache_gem = File.join Gem.user_dir, "cache", @a1.file_name
369
385
  assert File.exist? a1_cache_gem
370
386
  ensure
@@ -374,16 +390,16 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
374
390
  end
375
391
 
376
392
  def test_download_platform_legacy
377
- original_platform = 'old-platform'
393
+ original_platform = "old-platform"
378
394
 
379
- e1, e1_gem = util_gem 'e', '1' do |s|
395
+ e1, e1_gem = util_gem "e", "1" do |s|
380
396
  s.platform = Gem::Platform::CURRENT
381
397
  s.instance_variable_set :@original_platform, original_platform
382
398
  end
383
- e1.loaded_from = File.join(@gemhome, 'specifications', e1.full_name)
399
+ e1.loaded_from = File.join(@gemhome, "specifications", e1.full_name)
384
400
 
385
401
  e1_data = nil
386
- File.open e1_gem, 'rb' do |fp|
402
+ File.open e1_gem, "rb" do |fp|
387
403
  e1_data = fp.read
388
404
  end
389
405
 
@@ -391,7 +407,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
391
407
 
392
408
  e1_cache_gem = e1.cache_file
393
409
 
394
- assert_equal e1_cache_gem, fetcher.download(e1, 'http://gems.example.com')
410
+ assert_equal e1_cache_gem, fetcher.download(e1, "http://gems.example.com")
395
411
 
396
412
  assert_equal("http://gems.example.com/gems/#{e1.original_name}.gem",
397
413
  fetcher.instance_variable_get(:@test_arg).to_s)
@@ -418,15 +434,15 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
418
434
  def test_download_unsupported
419
435
  inst = Gem::RemoteFetcher.fetcher
420
436
 
421
- e = assert_raises ArgumentError do
422
- inst.download @a1, 'ftp://gems.rubyforge.org'
437
+ e = assert_raise ArgumentError do
438
+ inst.download @a1, "ftp://gems.rubyforge.org"
423
439
  end
424
440
 
425
- assert_equal 'unsupported URI scheme ftp', e.message
441
+ assert_equal "unsupported URI scheme ftp", e.message
426
442
  end
427
443
 
428
444
  def test_download_to_cache
429
- @a2, @a2_gem = util_gem 'a', '2'
445
+ @a2, @a2_gem = util_gem "a", "2"
430
446
 
431
447
  util_setup_spec_fetcher @a1, @a2
432
448
  @fetcher.instance_variable_set :@a1, @a1
@@ -442,7 +458,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
442
458
  end
443
459
  end
444
460
 
445
- gem = Gem::RemoteFetcher.fetcher.download_to_cache dep 'a'
461
+ gem = Gem::RemoteFetcher.fetcher.download_to_cache dep "a"
446
462
 
447
463
  assert_equal @a2.file_name, File.basename(gem)
448
464
  end
@@ -452,10 +468,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
452
468
  @fetcher = fetcher
453
469
 
454
470
  def fetcher.fetch_http(uri, mtime, head = nil)
455
- Gem::Util.gzip 'foo'
471
+ Gem::Util.gzip "foo"
456
472
  end
457
473
 
458
- assert_equal 'foo', fetcher.fetch_path(@uri + 'foo.gz')
474
+ assert_equal "foo", fetcher.fetch_path(@uri + "foo.gz")
459
475
  end
460
476
 
461
477
  def test_fetch_path_gzip_unmodified
@@ -466,7 +482,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
466
482
  nil
467
483
  end
468
484
 
469
- assert_nil fetcher.fetch_path(@uri + 'foo.gz', Time.at(0))
485
+ assert_nil fetcher.fetch_path(@uri + "foo.gz", Time.at(0))
470
486
  end
471
487
 
472
488
  def test_fetch_path_io_error
@@ -477,9 +493,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
477
493
  raise EOFError
478
494
  end
479
495
 
480
- url = 'http://example.com/uri'
496
+ url = "http://example.com/uri"
481
497
 
482
- e = assert_raises Gem::RemoteFetcher::FetchError do
498
+ e = assert_raise Gem::RemoteFetcher::FetchError do
483
499
  fetcher.fetch_path url
484
500
  end
485
501
 
@@ -495,9 +511,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
495
511
  raise SocketError
496
512
  end
497
513
 
498
- url = 'http://example.com/uri'
514
+ url = "http://example.com/uri"
499
515
 
500
- e = assert_raises Gem::RemoteFetcher::FetchError do
516
+ e = assert_raise Gem::RemoteFetcher::FetchError do
501
517
  fetcher.fetch_path url
502
518
  end
503
519
 
@@ -510,16 +526,54 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
510
526
  @fetcher = fetcher
511
527
 
512
528
  def fetcher.fetch_http(uri, mtime = nil, head = nil)
513
- raise Errno::ECONNREFUSED, 'connect(2)'
529
+ raise Errno::ECONNREFUSED, "connect(2)"
530
+ end
531
+
532
+ url = "http://example.com/uri"
533
+
534
+ e = assert_raise Gem::RemoteFetcher::FetchError do
535
+ fetcher.fetch_path url
536
+ end
537
+
538
+ assert_match %r{ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z},
539
+ e.message
540
+ assert_equal url, e.uri
541
+ end
542
+
543
+ def test_fetch_path_timeout_error
544
+ fetcher = Gem::RemoteFetcher.new nil
545
+ @fetcher = fetcher
546
+
547
+ def fetcher.fetch_http(uri, mtime = nil, head = nil)
548
+ raise Timeout::Error, "timed out"
514
549
  end
515
550
 
516
- url = 'http://example.com/uri'
551
+ url = "http://example.com/uri"
517
552
 
518
- e = assert_raises Gem::RemoteFetcher::FetchError do
553
+ e = assert_raise Gem::RemoteFetcher::FetchError do
519
554
  fetcher.fetch_path url
520
555
  end
521
556
 
522
- assert_match %r|ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z|,
557
+ assert_match %r{Timeout::Error: timed out \(#{Regexp.escape url}\)\z},
558
+ e.message
559
+ assert_equal url, e.uri
560
+ end
561
+
562
+ def test_fetch_path_getaddrinfo_error
563
+ fetcher = Gem::RemoteFetcher.new nil
564
+ @fetcher = fetcher
565
+
566
+ def fetcher.fetch_http(uri, mtime = nil, head = nil)
567
+ raise SocketError, "getaddrinfo: nodename nor servname provided"
568
+ end
569
+
570
+ url = "http://example.com/uri"
571
+
572
+ e = assert_raise Gem::RemoteFetcher::FetchError do
573
+ fetcher.fetch_path url
574
+ end
575
+
576
+ assert_match %r{SocketError: getaddrinfo: nodename nor servname provided \(#{Regexp.escape url}\)\z},
523
577
  e.message
524
578
  assert_equal url, e.uri
525
579
  end
@@ -532,9 +586,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
532
586
  raise OpenSSL::SSL::SSLError
533
587
  end
534
588
 
535
- url = 'http://example.com/uri'
589
+ url = "http://example.com/uri"
536
590
 
537
- e = assert_raises Gem::RemoteFetcher::FetchError do
591
+ e = assert_raise Gem::RemoteFetcher::FetchError do
538
592
  fetcher.fetch_path url
539
593
  end
540
594
 
@@ -555,7 +609,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
555
609
 
556
610
  def test_implicit_no_proxy
557
611
  use_ui @stub_ui do
558
- ENV['http_proxy'] = 'http://fakeurl:12345'
612
+ ENV["http_proxy"] = "http://fakeurl:12345"
559
613
  fetcher = Gem::RemoteFetcher.new :no_proxy
560
614
  @fetcher = fetcher
561
615
  assert_data_from_server fetcher.fetch_path(@server_uri)
@@ -564,7 +618,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
564
618
 
565
619
  def test_implicit_proxy
566
620
  use_ui @stub_ui do
567
- ENV['http_proxy'] = @proxy_uri
621
+ ENV["http_proxy"] = @proxy_uri
568
622
  fetcher = Gem::RemoteFetcher.new nil
569
623
  @fetcher = fetcher
570
624
  assert_data_from_proxy fetcher.fetch_path(@server_uri)
@@ -573,7 +627,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
573
627
 
574
628
  def test_implicit_upper_case_proxy
575
629
  use_ui @stub_ui do
576
- ENV['HTTP_PROXY'] = @proxy_uri
630
+ ENV["HTTP_PROXY"] = @proxy_uri
577
631
  fetcher = Gem::RemoteFetcher.new nil
578
632
  @fetcher = fetcher
579
633
  assert_data_from_proxy fetcher.fetch_path(@server_uri)
@@ -591,40 +645,40 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
591
645
  def test_fetch_http
592
646
  fetcher = Gem::RemoteFetcher.new nil
593
647
  @fetcher = fetcher
594
- url = 'http://gems.example.com/redirect'
648
+ url = "http://gems.example.com/redirect"
595
649
 
596
650
  def fetcher.request(uri, request_class, last_modified = nil)
597
- url = 'http://gems.example.com/redirect'
651
+ url = "http://gems.example.com/redirect"
598
652
  unless defined? @requested
599
653
  @requested = true
600
654
  res = Net::HTTPMovedPermanently.new nil, 301, nil
601
- res.add_field 'Location', url
655
+ res.add_field "Location", url
602
656
  res
603
657
  else
604
658
  res = Net::HTTPOK.new nil, 200, nil
605
- def res.body() 'real_path' end
659
+ def res.body() "real_path" end
606
660
  res
607
661
  end
608
662
  end
609
663
 
610
664
  data = fetcher.fetch_http URI.parse(url)
611
665
 
612
- assert_equal 'real_path', data
666
+ assert_equal "real_path", data
613
667
  end
614
668
 
615
669
  def test_fetch_http_redirects
616
670
  fetcher = Gem::RemoteFetcher.new nil
617
671
  @fetcher = fetcher
618
- url = 'http://gems.example.com/redirect'
672
+ url = "http://gems.example.com/redirect"
619
673
 
620
674
  def fetcher.request(uri, request_class, last_modified = nil)
621
- url = 'http://gems.example.com/redirect'
675
+ url = "http://gems.example.com/redirect"
622
676
  res = Net::HTTPMovedPermanently.new nil, 301, nil
623
- res.add_field 'Location', url
677
+ res.add_field "Location", url
624
678
  res
625
679
  end
626
680
 
627
- e = assert_raises Gem::RemoteFetcher::FetchError do
681
+ e = assert_raise Gem::RemoteFetcher::FetchError do
628
682
  fetcher.fetch_http URI.parse(url)
629
683
  end
630
684
 
@@ -634,14 +688,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
634
688
  def test_fetch_http_redirects_without_location
635
689
  fetcher = Gem::RemoteFetcher.new nil
636
690
  @fetcher = fetcher
637
- url = 'http://gems.example.com/redirect'
691
+ url = "http://gems.example.com/redirect"
638
692
 
639
693
  def fetcher.request(uri, request_class, last_modified = nil)
640
694
  res = Net::HTTPMovedPermanently.new nil, 301, nil
641
695
  res
642
696
  end
643
697
 
644
- e = assert_raises Gem::RemoteFetcher::FetchError do
698
+ e = assert_raise Gem::RemoteFetcher::FetchError do
645
699
  fetcher.fetch_http URI.parse(url)
646
700
  end
647
701
 
@@ -651,12 +705,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
651
705
  def test_fetch_http_with_additional_headers
652
706
  ENV["http_proxy"] = @proxy_uri
653
707
  ENV["no_proxy"] = URI::parse(@server_uri).host
654
- fetcher = Gem::RemoteFetcher.new nil, nil, {"X-Captain" => "murphy"}
708
+ fetcher = Gem::RemoteFetcher.new nil, nil, { "X-Captain" => "murphy" }
655
709
  @fetcher = fetcher
656
710
  assert_equal "murphy", fetcher.fetch_path(@server_uri)
657
711
  end
658
712
 
659
- def assert_fetch_s3(url, signature, token=nil, region='us-east-1', instance_profile_json=nil)
713
+ def assert_fetch_s3(url, signature, token=nil, region="us-east-1", instance_profile_json=nil)
660
714
  fetcher = Gem::RemoteFetcher.new nil
661
715
  @fetcher = fetcher
662
716
  $fetched_uri = nil
@@ -665,12 +719,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
665
719
  def fetcher.request(uri, request_class, last_modified = nil)
666
720
  $fetched_uri = uri
667
721
  res = Net::HTTPOK.new nil, 200, nil
668
- def res.body() 'success' end
722
+ def res.body() "success" end
669
723
  res
670
724
  end
671
725
 
672
726
  def fetcher.s3_uri_signer(uri)
673
- require 'json'
727
+ require "json"
674
728
  s3_uri_signer = Gem::S3URISigner.new(uri)
675
729
  def s3_uri_signer.ec2_metadata_credentials_json
676
730
  JSON.parse($instance_profile)
@@ -684,18 +738,18 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
684
738
  data = fetcher.fetch_s3 URI.parse(url)
685
739
 
686
740
  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
687
- assert_equal 'success', data
741
+ assert_equal "success", data
688
742
  ensure
689
743
  $fetched_uri = nil
690
744
  end
691
745
 
692
746
  def test_fetch_s3_config_creds
693
747
  Gem.configuration[:s3_source] = {
694
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass'}
748
+ "my-bucket" => { :id => "testuser", :secret => "testpass" },
695
749
  }
696
- url = 's3://my-bucket/gems/specs.4.8.gz'
750
+ url = "s3://my-bucket/gems/specs.4.8.gz"
697
751
  Time.stub :now, Time.at(1561353581) do
698
- assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
752
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
699
753
  end
700
754
  ensure
701
755
  Gem.configuration[:s3_source] = nil
@@ -703,11 +757,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
703
757
 
704
758
  def test_fetch_s3_config_creds_with_region
705
759
  Gem.configuration[:s3_source] = {
706
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass', :region => 'us-west-2'}
760
+ "my-bucket" => { :id => "testuser", :secret => "testpass", :region => "us-west-2" },
707
761
  }
708
- url = 's3://my-bucket/gems/specs.4.8.gz'
762
+ url = "s3://my-bucket/gems/specs.4.8.gz"
709
763
  Time.stub :now, Time.at(1561353581) do
710
- assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2'
764
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
711
765
  end
712
766
  ensure
713
767
  Gem.configuration[:s3_source] = nil
@@ -715,79 +769,79 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
715
769
 
716
770
  def test_fetch_s3_config_creds_with_token
717
771
  Gem.configuration[:s3_source] = {
718
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass', :security_token => 'testtoken'}
772
+ "my-bucket" => { :id => "testuser", :secret => "testpass", :security_token => "testtoken" },
719
773
  }
720
- url = 's3://my-bucket/gems/specs.4.8.gz'
774
+ url = "s3://my-bucket/gems/specs.4.8.gz"
721
775
  Time.stub :now, Time.at(1561353581) do
722
- assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken'
776
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
723
777
  end
724
778
  ensure
725
779
  Gem.configuration[:s3_source] = nil
726
780
  end
727
781
 
728
782
  def test_fetch_s3_env_creds
729
- ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
730
- ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
731
- ENV['AWS_SESSION_TOKEN'] = nil
783
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
784
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
785
+ ENV["AWS_SESSION_TOKEN"] = nil
732
786
  Gem.configuration[:s3_source] = {
733
- 'my-bucket' => {:provider => 'env'}
787
+ "my-bucket" => { :provider => "env" },
734
788
  }
735
- url = 's3://my-bucket/gems/specs.4.8.gz'
789
+ url = "s3://my-bucket/gems/specs.4.8.gz"
736
790
  Time.stub :now, Time.at(1561353581) do
737
- assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
791
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
738
792
  end
739
793
  ensure
740
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
794
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
741
795
  Gem.configuration[:s3_source] = nil
742
796
  end
743
797
 
744
798
  def test_fetch_s3_env_creds_with_region
745
- ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
746
- ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
747
- ENV['AWS_SESSION_TOKEN'] = nil
799
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
800
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
801
+ ENV["AWS_SESSION_TOKEN"] = nil
748
802
  Gem.configuration[:s3_source] = {
749
- 'my-bucket' => {:provider => 'env', :region => 'us-west-2'}
803
+ "my-bucket" => { :provider => "env", :region => "us-west-2" },
750
804
  }
751
- url = 's3://my-bucket/gems/specs.4.8.gz'
805
+ url = "s3://my-bucket/gems/specs.4.8.gz"
752
806
  Time.stub :now, Time.at(1561353581) do
753
- assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2'
807
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
754
808
  end
755
809
  ensure
756
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
810
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
757
811
  Gem.configuration[:s3_source] = nil
758
812
  end
759
813
 
760
814
  def test_fetch_s3_env_creds_with_token
761
- ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
762
- ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
763
- ENV['AWS_SESSION_TOKEN'] = 'testtoken'
815
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
816
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
817
+ ENV["AWS_SESSION_TOKEN"] = "testtoken"
764
818
  Gem.configuration[:s3_source] = {
765
- 'my-bucket' => {:provider => 'env'}
819
+ "my-bucket" => { :provider => "env" },
766
820
  }
767
- url = 's3://my-bucket/gems/specs.4.8.gz'
821
+ url = "s3://my-bucket/gems/specs.4.8.gz"
768
822
  Time.stub :now, Time.at(1561353581) do
769
- assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken'
823
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
770
824
  end
771
825
  ensure
772
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
826
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
773
827
  Gem.configuration[:s3_source] = nil
774
828
  end
775
829
 
776
830
  def test_fetch_s3_url_creds
777
- url = 's3://testuser:testpass@my-bucket/gems/specs.4.8.gz'
831
+ url = "s3://testuser:testpass@my-bucket/gems/specs.4.8.gz"
778
832
  Time.stub :now, Time.at(1561353581) do
779
- assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
833
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
780
834
  end
781
835
  end
782
836
 
783
837
  def test_fetch_s3_instance_profile_creds
784
838
  Gem.configuration[:s3_source] = {
785
- 'my-bucket' => {:provider => 'instance_profile'}
839
+ "my-bucket" => { :provider => "instance_profile" },
786
840
  }
787
841
 
788
- url = 's3://my-bucket/gems/specs.4.8.gz'
842
+ url = "s3://my-bucket/gems/specs.4.8.gz"
789
843
  Time.stub :now, Time.at(1561353581) do
790
- assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b', nil, 'us-east-1',
844
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b", nil, "us-east-1",
791
845
  '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
792
846
  end
793
847
  ensure
@@ -796,12 +850,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
796
850
 
797
851
  def test_fetch_s3_instance_profile_creds_with_region
798
852
  Gem.configuration[:s3_source] = {
799
- 'my-bucket' => {:provider => 'instance_profile', :region => 'us-west-2'}
853
+ "my-bucket" => { :provider => "instance_profile", :region => "us-west-2" },
800
854
  }
801
855
 
802
- url = 's3://my-bucket/gems/specs.4.8.gz'
856
+ url = "s3://my-bucket/gems/specs.4.8.gz"
803
857
  Time.stub :now, Time.at(1561353581) do
804
- assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2',
858
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2",
805
859
  '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
806
860
  end
807
861
  ensure
@@ -810,12 +864,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
810
864
 
811
865
  def test_fetch_s3_instance_profile_creds_with_token
812
866
  Gem.configuration[:s3_source] = {
813
- 'my-bucket' => {:provider => 'instance_profile'}
867
+ "my-bucket" => { :provider => "instance_profile" },
814
868
  }
815
869
 
816
- url = 's3://my-bucket/gems/specs.4.8.gz'
870
+ url = "s3://my-bucket/gems/specs.4.8.gz"
817
871
  Time.stub :now, Time.at(1561353581) do
818
- assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken', 'us-east-1',
872
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken", "us-east-1",
819
873
  '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass", "Token": "testtoken"}'
820
874
  end
821
875
  ensure
@@ -826,7 +880,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
826
880
  fetcher = Gem::RemoteFetcher.new nil
827
881
  @fetcher = fetcher
828
882
 
829
- e = assert_raises Gem::RemoteFetcher::FetchError do
883
+ e = assert_raise Gem::RemoteFetcher::FetchError do
830
884
  fetcher.fetch_s3 URI.parse(url)
831
885
  end
832
886
 
@@ -834,35 +888,35 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
834
888
  end
835
889
 
836
890
  def test_fetch_s3_no_source_key
837
- url = 's3://my-bucket/gems/specs.4.8.gz'
838
- refute_fetch_s3 url, 'no s3_source key exists in .gemrc'
891
+ url = "s3://my-bucket/gems/specs.4.8.gz"
892
+ refute_fetch_s3 url, "no s3_source key exists in .gemrc"
839
893
  end
840
894
 
841
895
  def test_fetch_s3_no_host
842
896
  Gem.configuration[:s3_source] = {
843
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass'}
897
+ "my-bucket" => { :id => "testuser", :secret => "testpass" },
844
898
  }
845
899
 
846
- url = 's3://other-bucket/gems/specs.4.8.gz'
847
- refute_fetch_s3 url, 'no key for host other-bucket in s3_source in .gemrc'
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"
848
902
  ensure
849
903
  Gem.configuration[:s3_source] = nil
850
904
  end
851
905
 
852
906
  def test_fetch_s3_no_id
853
- Gem.configuration[:s3_source] = { 'my-bucket' => {:secret => 'testpass'} }
907
+ Gem.configuration[:s3_source] = { "my-bucket" => { :secret => "testpass" } }
854
908
 
855
- url = 's3://my-bucket/gems/specs.4.8.gz'
856
- refute_fetch_s3 url, 's3_source for my-bucket missing id or secret'
909
+ url = "s3://my-bucket/gems/specs.4.8.gz"
910
+ refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
857
911
  ensure
858
912
  Gem.configuration[:s3_source] = nil
859
913
  end
860
914
 
861
915
  def test_fetch_s3_no_secret
862
- Gem.configuration[:s3_source] = { 'my-bucket' => {:id => 'testuser'} }
916
+ Gem.configuration[:s3_source] = { "my-bucket" => { :id => "testuser" } }
863
917
 
864
- url = 's3://my-bucket/gems/specs.4.8.gz'
865
- refute_fetch_s3 url, 's3_source for my-bucket missing id or secret'
918
+ url = "s3://my-bucket/gems/specs.4.8.gz"
919
+ refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
866
920
  ensure
867
921
  Gem.configuration[:s3_source] = nil
868
922
  end
@@ -892,7 +946,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
892
946
  @fetcher = fetcher
893
947
 
894
948
  assert_throws :block_called do
895
- fetcher.request URI('http://example'), Net::HTTP::Get do |req|
949
+ fetcher.request URI("http://example"), Net::HTTP::Get do |req|
896
950
  assert_kind_of Net::HTTPGenericRequest, req
897
951
  throw :block_called
898
952
  end
@@ -901,7 +955,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
901
955
 
902
956
  def test_yaml_error_on_size
903
957
  use_ui @stub_ui do
904
- self.class.enable_yaml = false
958
+ self.enable_yaml = false
905
959
  fetcher = Gem::RemoteFetcher.new nil
906
960
  @fetcher = fetcher
907
961
  assert_error { fetcher.size }
@@ -909,23 +963,20 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
909
963
  end
910
964
 
911
965
  def test_ssl_connection
912
- ssl_server = self.class.start_ssl_server
913
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
966
+ ssl_server = start_ssl_server
967
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
914
968
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
915
969
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
916
970
  end
917
971
  end
918
972
 
919
973
  def test_ssl_client_cert_auth_connection
920
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
921
- skip 'openssl in jruby fails' if java_platform?
922
-
923
- ssl_server = self.class.start_ssl_server({
974
+ ssl_server = start_ssl_server({
924
975
  :SSLVerifyClient =>
925
- OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
976
+ OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
926
977
 
927
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
928
- temp_client_cert = File.join(DIR, 'client.pem')
978
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
979
+ temp_client_cert = File.join(__dir__, "client.pem")
929
980
 
930
981
  with_configured_fetcher(
931
982
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
@@ -935,48 +986,46 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
935
986
  end
936
987
 
937
988
  def test_do_not_allow_invalid_client_cert_auth_connection
938
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
939
-
940
- ssl_server = self.class.start_ssl_server({
989
+ ssl_server = start_ssl_server({
941
990
  :SSLVerifyClient =>
942
- OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
991
+ OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
943
992
 
944
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
945
- temp_client_cert = File.join(DIR, 'invalid_client.pem')
993
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
994
+ temp_client_cert = File.join(__dir__, "invalid_client.pem")
946
995
 
947
996
  with_configured_fetcher(
948
997
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
949
998
  ":ssl_client_cert: #{temp_client_cert}\n") do |fetcher|
950
- assert_raises Gem::RemoteFetcher::FetchError do
999
+ assert_raise Gem::RemoteFetcher::FetchError do
951
1000
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
952
1001
  end
953
1002
  end
954
1003
  end
955
1004
 
956
1005
  def test_do_not_allow_insecure_ssl_connection_by_default
957
- ssl_server = self.class.start_ssl_server
1006
+ ssl_server = start_ssl_server
958
1007
  with_configured_fetcher do |fetcher|
959
- assert_raises Gem::RemoteFetcher::FetchError do
1008
+ assert_raise Gem::RemoteFetcher::FetchError do
960
1009
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
961
1010
  end
962
1011
  end
963
1012
  end
964
1013
 
965
1014
  def test_ssl_connection_allow_verify_none
966
- ssl_server = self.class.start_ssl_server
1015
+ ssl_server = start_ssl_server
967
1016
  with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher|
968
1017
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
969
1018
  end
970
1019
  end
971
1020
 
972
1021
  def test_do_not_follow_insecure_redirect
973
- ssl_server = self.class.start_ssl_server
974
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
1022
+ ssl_server = start_ssl_server
1023
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
975
1024
  expected_error_message =
976
1025
  "redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
977
1026
 
978
1027
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
979
- err = assert_raises Gem::RemoteFetcher::FetchError do
1028
+ err = assert_raise Gem::RemoteFetcher::FetchError do
980
1029
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri}")
981
1030
  end
982
1031
 
@@ -985,11 +1034,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
985
1034
  end
986
1035
 
987
1036
  def test_nil_ca_cert
988
- ssl_server = self.class.start_ssl_server
1037
+ ssl_server = start_ssl_server
989
1038
  temp_ca_cert = nil
990
1039
 
991
1040
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
992
- assert_raises Gem::RemoteFetcher::FetchError do
1041
+ assert_raise Gem::RemoteFetcher::FetchError do
993
1042
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}")
994
1043
  end
995
1044
  end
@@ -997,8 +1046,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
997
1046
 
998
1047
  def with_configured_fetcher(config_str = nil, &block)
999
1048
  if config_str
1000
- temp_conf = File.join @tempdir, '.gemrc'
1001
- File.open temp_conf, 'w' do |fp|
1049
+ temp_conf = File.join @tempdir, ".gemrc"
1050
+ File.open temp_conf, "w" do |fp|
1002
1051
  fp.puts config_str
1003
1052
  end
1004
1053
  Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
@@ -1031,157 +1080,147 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1031
1080
  end
1032
1081
 
1033
1082
  class NilLog < WEBrick::Log
1034
-
1035
1083
  def log(level, data) #Do nothing
1036
1084
  end
1037
-
1038
1085
  end
1039
1086
 
1040
- class << self
1087
+ private
1041
1088
 
1042
- attr_reader :normal_server, :proxy_server
1043
- attr_accessor :enable_zip, :enable_yaml
1089
+ attr_reader :normal_server, :proxy_server
1090
+ attr_accessor :enable_zip, :enable_yaml
1044
1091
 
1045
- def start_servers
1046
- @normal_server ||= start_server(SERVER_DATA)
1047
- @proxy_server ||= start_server(PROXY_DATA)
1048
- @enable_yaml = true
1049
- @enable_zip = false
1050
- @ssl_server = nil
1051
- @ssl_server_thread = nil
1052
- end
1092
+ def start_servers
1093
+ @normal_server ||= start_server(SERVER_DATA)
1094
+ @proxy_server ||= start_server(PROXY_DATA)
1095
+ @enable_yaml = true
1096
+ @enable_zip = false
1097
+ @ssl_server = nil
1098
+ @ssl_server_thread = nil
1099
+ end
1053
1100
 
1054
- def stop_servers
1055
- if @normal_server
1056
- @normal_server.kill.join
1057
- @normal_server = nil
1058
- end
1059
- if @proxy_server
1060
- @proxy_server.kill.join
1061
- @proxy_server = nil
1062
- end
1063
- if @ssl_server
1064
- @ssl_server.stop
1065
- @ssl_server = nil
1066
- end
1067
- if @ssl_server_thread
1068
- @ssl_server_thread.kill.join
1069
- @ssl_server_thread = nil
1070
- end
1071
- utils = WEBrick::Utils # TimeoutHandler is since 1.9
1072
- utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
1101
+ def stop_servers
1102
+ if @normal_server
1103
+ @normal_server.kill.join
1104
+ @normal_server = nil
1073
1105
  end
1074
-
1075
- def normal_server_port
1076
- @normal_server[:server].config[:Port]
1106
+ if @proxy_server
1107
+ @proxy_server.kill.join
1108
+ @proxy_server = nil
1077
1109
  end
1078
-
1079
- def proxy_server_port
1080
- @proxy_server[:server].config[:Port]
1110
+ if @ssl_server
1111
+ @ssl_server.stop
1112
+ @ssl_server = nil
1113
+ end
1114
+ if @ssl_server_thread
1115
+ @ssl_server_thread.kill.join
1116
+ @ssl_server_thread = nil
1081
1117
  end
1118
+ utils = WEBrick::Utils # TimeoutHandler is since 1.9
1119
+ utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
1120
+ end
1082
1121
 
1083
- DIR = File.expand_path(File.dirname(__FILE__))
1122
+ def normal_server_port
1123
+ @normal_server[:server].config[:Port]
1124
+ end
1084
1125
 
1085
- def start_ssl_server(config = {})
1086
- raise MiniTest::Skip, 'openssl not installed' unless
1087
- defined?(OpenSSL::SSL)
1126
+ def proxy_server_port
1127
+ @proxy_server[:server].config[:Port]
1128
+ end
1088
1129
 
1089
- null_logger = NilLog.new
1090
- server = WEBrick::HTTPServer.new({
1091
- :Port => 0,
1092
- :Logger => null_logger,
1093
- :AccessLog => [],
1094
- :SSLEnable => true,
1095
- :SSLCACertificateFile => File.join(DIR, 'ca_cert.pem'),
1096
- :SSLCertificate => cert('ssl_cert.pem'),
1097
- :SSLPrivateKey => key('ssl_key.pem'),
1098
- :SSLVerifyClient => nil,
1099
- :SSLCertName => nil
1100
- }.merge(config))
1101
- server.mount_proc("/yaml") do |req, res|
1102
- res.body = "--- true\n"
1103
- end
1104
- server.mount_proc("/insecure_redirect") do |req, res|
1105
- res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
1106
- end
1107
- server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
1108
- t = Thread.new do
1109
- begin
1110
- server.start
1111
- rescue Exception => ex
1112
- abort ex.message
1113
- puts "ERROR during server thread: #{ex.message}"
1114
- ensure
1115
- server.shutdown
1116
- end
1117
- end
1118
- while server.status != :Running
1119
- sleep 0.1
1120
- unless t.alive?
1121
- t.join
1122
- raise
1123
- end
1124
- end
1125
- @ssl_server = server
1126
- @ssl_server_thread = t
1127
- server
1128
- end
1129
-
1130
- private
1131
-
1132
- def start_server(data)
1133
- null_logger = NilLog.new
1134
- s = WEBrick::HTTPServer.new(
1135
- :Port => 0,
1136
- :DocumentRoot => nil,
1137
- :Logger => null_logger,
1138
- :AccessLog => null_logger
1139
- )
1140
- s.mount_proc("/kill") { |req, res| s.shutdown }
1141
- s.mount_proc("/yaml") do |req, res|
1142
- if req["X-Captain"]
1143
- res.body = req["X-Captain"]
1144
- elsif @enable_yaml
1145
- res.body = data
1146
- res['Content-Type'] = 'text/plain'
1147
- res['content-length'] = data.size
1148
- else
1149
- res.status = "404"
1150
- res.body = "<h1>NOT FOUND</h1>"
1151
- res['Content-Type'] = 'text/html'
1152
- end
1130
+ def start_ssl_server(config = {})
1131
+ pend "starting this test server fails randomly on jruby" if Gem.java_platform?
1132
+
1133
+ null_logger = NilLog.new
1134
+ server = WEBrick::HTTPServer.new({
1135
+ :Port => 0,
1136
+ :Logger => null_logger,
1137
+ :AccessLog => [],
1138
+ :SSLEnable => true,
1139
+ :SSLCACertificateFile => File.join(__dir__, "ca_cert.pem"),
1140
+ :SSLCertificate => cert("ssl_cert.pem"),
1141
+ :SSLPrivateKey => key("ssl_key.pem"),
1142
+ :SSLVerifyClient => nil,
1143
+ :SSLCertName => nil,
1144
+ }.merge(config))
1145
+ server.mount_proc("/yaml") do |req, res|
1146
+ res.body = "--- true\n"
1147
+ end
1148
+ server.mount_proc("/insecure_redirect") do |req, res|
1149
+ res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query["to"])
1150
+ end
1151
+ server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
1152
+ t = Thread.new do
1153
+ begin
1154
+ server.start
1155
+ rescue Exception => ex
1156
+ puts "ERROR during server thread: #{ex.message}"
1157
+ raise
1158
+ ensure
1159
+ server.shutdown
1153
1160
  end
1154
- s.mount_proc("/yaml.Z") do |req, res|
1155
- if @enable_zip
1156
- res.body = Zlib::Deflate.deflate(data)
1157
- res['Content-Type'] = 'text/plain'
1158
- else
1159
- res.status = "404"
1160
- res.body = "<h1>NOT FOUND</h1>"
1161
- res['Content-Type'] = 'text/html'
1162
- end
1161
+ end
1162
+ while server.status != :Running
1163
+ sleep 0.1
1164
+ unless t.alive?
1165
+ t.join
1166
+ raise
1163
1167
  end
1164
- th = Thread.new do
1165
- begin
1166
- s.start
1167
- rescue Exception => ex
1168
- abort "ERROR during server thread: #{ex.message}"
1169
- ensure
1170
- s.shutdown
1171
- end
1168
+ end
1169
+ @ssl_server = server
1170
+ @ssl_server_thread = t
1171
+ server
1172
+ end
1173
+
1174
+ def start_server(data)
1175
+ null_logger = NilLog.new
1176
+ s = WEBrick::HTTPServer.new(
1177
+ :Port => 0,
1178
+ :DocumentRoot => nil,
1179
+ :Logger => null_logger,
1180
+ :AccessLog => null_logger
1181
+ )
1182
+ s.mount_proc("/kill") {|req, res| s.shutdown }
1183
+ s.mount_proc("/yaml") do |req, res|
1184
+ if req["X-Captain"]
1185
+ res.body = req["X-Captain"]
1186
+ elsif @enable_yaml
1187
+ res.body = data
1188
+ res["Content-Type"] = "text/plain"
1189
+ res["content-length"] = data.size
1190
+ else
1191
+ res.status = "404"
1192
+ res.body = "<h1>NOT FOUND</h1>"
1193
+ res["Content-Type"] = "text/html"
1172
1194
  end
1173
- th[:server] = s
1174
- th
1175
1195
  end
1176
-
1177
- def cert(filename)
1178
- OpenSSL::X509::Certificate.new(File.read(File.join(DIR, filename)))
1196
+ s.mount_proc("/yaml.Z") do |req, res|
1197
+ if @enable_zip
1198
+ res.body = Zlib::Deflate.deflate(data)
1199
+ res["Content-Type"] = "text/plain"
1200
+ else
1201
+ res.status = "404"
1202
+ res.body = "<h1>NOT FOUND</h1>"
1203
+ res["Content-Type"] = "text/html"
1204
+ end
1179
1205
  end
1180
-
1181
- def key(filename)
1182
- OpenSSL::PKey::RSA.new(File.read(File.join(DIR, filename)))
1206
+ th = Thread.new do
1207
+ begin
1208
+ s.start
1209
+ rescue Exception => ex
1210
+ abort "ERROR during server thread: #{ex.message}"
1211
+ ensure
1212
+ s.shutdown
1213
+ end
1183
1214
  end
1215
+ th[:server] = s
1216
+ th
1217
+ end
1184
1218
 
1219
+ def cert(filename)
1220
+ OpenSSL::X509::Certificate.new(File.read(File.join(__dir__, filename)))
1185
1221
  end
1186
1222
 
1187
- end if defined?(OpenSSL::SSL)
1223
+ def key(filename)
1224
+ OpenSSL::PKey::RSA.new(File.read(File.join(__dir__, filename)))
1225
+ end
1226
+ end if Gem::HAVE_OPENSSL