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,16 +1,14 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- require 'rubygems/package/tar_test_case'
5
- require 'digest'
3
+ require_relative "package/tar_test_case"
4
+ require "rubygems/openssl"
6
5
 
7
6
  class TestGemPackage < Gem::Package::TarTestCase
8
-
9
7
  def setup
10
8
  super
11
9
 
12
- @spec = quick_gem 'a' do |s|
13
- s.description = 'π'
10
+ @spec = quick_gem "a" do |s|
11
+ s.description = "π"
14
12
  s.files = %w[lib/code.rb]
15
13
  end
16
14
 
@@ -18,19 +16,19 @@ class TestGemPackage < Gem::Package::TarTestCase
18
16
 
19
17
  @gem = @spec.cache_file
20
18
 
21
- @destination = File.join @tempdir, 'extract'
19
+ @destination = File.join @tempdir, "extract"
22
20
 
23
21
  FileUtils.mkdir_p @destination
24
22
  end
25
23
 
26
24
  def test_class_new_old_format
27
- skip "jruby can't require the simple_gem file" if Gem.java_platform?
25
+ pend "jruby can't require the simple_gem file" if Gem.java_platform?
28
26
  require_relative "simple_gem"
29
- File.open 'old_format.gem', 'wb' do |io|
27
+ File.open "old_format.gem", "wb" do |io|
30
28
  io.write SIMPLE_GEM
31
29
  end
32
30
 
33
- package = Gem::Package.new 'old_format.gem'
31
+ package = Gem::Package.new "old_format.gem"
34
32
 
35
33
  assert package.spec
36
34
  end
@@ -38,17 +36,17 @@ class TestGemPackage < Gem::Package::TarTestCase
38
36
  def test_add_checksums
39
37
  gem_io = StringIO.new
40
38
 
41
- spec = Gem::Specification.new 'build', '1'
42
- spec.summary = 'build'
43
- spec.authors = 'build'
44
- spec.files = ['lib/code.rb']
39
+ spec = Gem::Specification.new "build", "1"
40
+ spec.summary = "build"
41
+ spec.authors = "build"
42
+ spec.files = ["lib/code.rb"]
45
43
  spec.date = Time.at 0
46
- spec.rubygems_version = Gem::Version.new '0'
44
+ spec.rubygems_version = Gem::Version.new "0"
47
45
 
48
- FileUtils.mkdir 'lib'
46
+ FileUtils.mkdir "lib"
49
47
 
50
- File.open 'lib/code.rb', 'w' do |io|
51
- io.write '# lib/code.rb'
48
+ File.open "lib/code.rb", "w" do |io|
49
+ io.write "# lib/code.rb"
52
50
  end
53
51
 
54
52
  package = Gem::Package.new spec.file_name
@@ -71,11 +69,11 @@ class TestGemPackage < Gem::Package::TarTestCase
71
69
 
72
70
  reader.each_entry do |entry|
73
71
  case entry.full_name
74
- when 'checksums.yaml.gz' then
72
+ when "checksums.yaml.gz" then
75
73
  Zlib::GzipReader.wrap entry do |io|
76
74
  checksums = io.read
77
75
  end
78
- when 'data.tar.gz' then
76
+ when "data.tar.gz" then
79
77
  tar = entry.read
80
78
  end
81
79
  end
@@ -86,36 +84,33 @@ class TestGemPackage < Gem::Package::TarTestCase
86
84
  io.write spec.to_yaml
87
85
  end
88
86
 
89
- metadata_sha256 = Digest::SHA256.hexdigest s.string
90
- metadata_sha512 = Digest::SHA512.hexdigest s.string
87
+ metadata_sha256 = OpenSSL::Digest::SHA256.hexdigest s.string
88
+ metadata_sha512 = OpenSSL::Digest::SHA512.hexdigest s.string
91
89
 
92
90
  expected = {
93
- 'SHA512' => {
94
- 'metadata.gz' => metadata_sha512,
95
- 'data.tar.gz' => Digest::SHA512.hexdigest(tar),
96
- }
91
+ "SHA512" => {
92
+ "metadata.gz" => metadata_sha512,
93
+ "data.tar.gz" => OpenSSL::Digest::SHA512.hexdigest(tar),
94
+ },
95
+ "SHA256" => {
96
+ "metadata.gz" => metadata_sha256,
97
+ "data.tar.gz" => OpenSSL::Digest::SHA256.hexdigest(tar),
98
+ },
97
99
  }
98
100
 
99
- if defined?(OpenSSL::Digest)
100
- expected['SHA256'] = {
101
- 'metadata.gz' => metadata_sha256,
102
- 'data.tar.gz' => Digest::SHA256.hexdigest(tar),
103
- }
104
- end
105
-
106
- assert_equal expected, YAML.load(checksums)
101
+ assert_equal expected, load_yaml(checksums)
107
102
  end
108
103
 
109
104
  def test_build_time_uses_source_date_epoch
110
105
  epoch = ENV["SOURCE_DATE_EPOCH"]
111
106
  ENV["SOURCE_DATE_EPOCH"] = "123456789"
112
107
 
113
- spec = Gem::Specification.new 'build', '1'
114
- spec.summary = 'build'
115
- spec.authors = 'build'
116
- spec.files = ['lib/code.rb']
108
+ spec = Gem::Specification.new "build", "1"
109
+ spec.summary = "build"
110
+ spec.authors = "build"
111
+ spec.files = ["lib/code.rb"]
117
112
  spec.date = Time.at 0
118
- spec.rubygems_version = Gem::Version.new '0'
113
+ spec.rubygems_version = Gem::Version.new "0"
119
114
 
120
115
  package = Gem::Package.new spec.file_name
121
116
 
@@ -128,11 +123,11 @@ class TestGemPackage < Gem::Package::TarTestCase
128
123
  epoch = ENV["SOURCE_DATE_EPOCH"]
129
124
  ENV["SOURCE_DATE_EPOCH"] = nil
130
125
 
131
- spec = Gem::Specification.new 'build', '1'
132
- spec.summary = 'build'
133
- spec.authors = 'build'
134
- spec.files = ['lib/code.rb']
135
- spec.rubygems_version = Gem::Version.new '0'
126
+ spec = Gem::Specification.new "build", "1"
127
+ spec.summary = "build"
128
+ spec.authors = "build"
129
+ spec.files = ["lib/code.rb"]
130
+ spec.rubygems_version = Gem::Version.new "0"
136
131
 
137
132
  package = Gem::Package.new spec.file_name
138
133
 
@@ -149,17 +144,17 @@ class TestGemPackage < Gem::Package::TarTestCase
149
144
  spec = Gem::Specification.new
150
145
  spec.files = %w[lib/code.rb lib/empty]
151
146
 
152
- FileUtils.mkdir_p 'lib/empty'
147
+ FileUtils.mkdir_p "lib/empty"
153
148
 
154
- File.open 'lib/code.rb', 'w' do |io|
155
- io.write '# lib/code.rb'
149
+ File.open "lib/code.rb", "w" do |io|
150
+ io.write "# lib/code.rb"
156
151
  end
157
152
 
158
- File.open 'lib/extra.rb', 'w' do |io|
159
- io.write '# lib/extra.rb'
153
+ File.open "lib/extra.rb", "w" do |io|
154
+ io.write "# lib/extra.rb"
160
155
  end
161
156
 
162
- package = Gem::Package.new 'bogus.gem'
157
+ package = Gem::Package.new "bogus.gem"
163
158
  package.spec = spec
164
159
 
165
160
  tar = util_tar do |tar_io|
@@ -183,25 +178,25 @@ class TestGemPackage < Gem::Package::TarTestCase
183
178
  spec = Gem::Specification.new
184
179
  spec.files = %w[lib/code.rb lib/code_sym.rb lib/code_sym2.rb]
185
180
 
186
- FileUtils.mkdir_p 'lib'
181
+ FileUtils.mkdir_p "lib"
187
182
 
188
- File.open 'lib/code.rb', 'w' do |io|
189
- io.write '# lib/code.rb'
183
+ File.open "lib/code.rb", "w" do |io|
184
+ io.write "# lib/code.rb"
190
185
  end
191
186
 
192
187
  # NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb
193
188
  begin
194
- File.symlink('code.rb', 'lib/code_sym.rb')
195
- File.symlink('../lib/code.rb', 'lib/code_sym2.rb')
189
+ File.symlink("code.rb", "lib/code_sym.rb")
190
+ File.symlink("../lib/code.rb", "lib/code_sym2.rb")
196
191
  rescue Errno::EACCES => e
197
192
  if win_platform?
198
- skip "symlink - must be admin with no UAC on Windows"
193
+ pend "symlink - must be admin with no UAC on Windows"
199
194
  else
200
195
  raise e
201
196
  end
202
197
  end
203
198
 
204
- package = Gem::Package.new 'bogus.gem'
199
+ package = Gem::Package.new "bogus.gem"
205
200
  package.spec = spec
206
201
 
207
202
  tar = util_tar do |tar_io|
@@ -223,20 +218,20 @@ class TestGemPackage < Gem::Package::TarTestCase
223
218
  end
224
219
 
225
220
  assert_equal %w[lib/code.rb], files
226
- assert_equal [{'lib/code_sym.rb' => 'lib/code.rb'}, {'lib/code_sym2.rb' => '../lib/code.rb'}], symlinks
221
+ assert_equal [{ "lib/code_sym.rb" => "code.rb" }, { "lib/code_sym2.rb" => "../lib/code.rb" }], symlinks
227
222
  end
228
223
 
229
224
  def test_build
230
- spec = Gem::Specification.new 'build', '1'
231
- spec.summary = 'build'
232
- spec.authors = 'build'
233
- spec.files = ['lib/code.rb']
225
+ spec = Gem::Specification.new "build", "1"
226
+ spec.summary = "build"
227
+ spec.authors = "build"
228
+ spec.files = ["lib/code.rb"]
234
229
  spec.rubygems_version = :junk
235
230
 
236
- FileUtils.mkdir 'lib'
231
+ FileUtils.mkdir "lib"
237
232
 
238
- File.open 'lib/code.rb', 'w' do |io|
239
- io.write '# lib/code.rb'
233
+ File.open "lib/code.rb", "w" do |io|
234
+ io.write "# lib/code.rb"
240
235
  end
241
236
 
242
237
  package = Gem::Package.new spec.file_name
@@ -245,7 +240,7 @@ class TestGemPackage < Gem::Package::TarTestCase
245
240
  package.build
246
241
 
247
242
  assert_equal Gem::VERSION, spec.rubygems_version
248
- assert_path_exists spec.file_name
243
+ assert_path_exist spec.file_name
249
244
 
250
245
  reader = Gem::Package.new spec.file_name
251
246
  assert_equal spec, reader.spec
@@ -257,25 +252,25 @@ class TestGemPackage < Gem::Package::TarTestCase
257
252
  end
258
253
 
259
254
  def test_build_auto_signed
260
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
255
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
261
256
 
262
- FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
257
+ FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
263
258
 
264
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
259
+ private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
265
260
  Gem::Security.write PRIVATE_KEY, private_key_path
266
261
 
267
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
262
+ public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
268
263
  FileUtils.cp PUBLIC_CERT_PATH, public_cert_path
269
264
 
270
- spec = Gem::Specification.new 'build', '1'
271
- spec.summary = 'build'
272
- spec.authors = 'build'
273
- spec.files = ['lib/code.rb']
265
+ spec = Gem::Specification.new "build", "1"
266
+ spec.summary = "build"
267
+ spec.authors = "build"
268
+ spec.files = ["lib/code.rb"]
274
269
 
275
- FileUtils.mkdir 'lib'
270
+ FileUtils.mkdir "lib"
276
271
 
277
- File.open 'lib/code.rb', 'w' do |io|
278
- io.write '# lib/code.rb'
272
+ File.open "lib/code.rb", "w" do |io|
273
+ io.write "# lib/code.rb"
279
274
  end
280
275
 
281
276
  package = Gem::Package.new spec.file_name
@@ -284,7 +279,7 @@ class TestGemPackage < Gem::Package::TarTestCase
284
279
  package.build
285
280
 
286
281
  assert_equal Gem::VERSION, spec.rubygems_version
287
- assert_path_exists spec.file_name
282
+ assert_path_exist spec.file_name
288
283
 
289
284
  reader = Gem::Package.new spec.file_name
290
285
  assert reader.verify
@@ -300,25 +295,25 @@ class TestGemPackage < Gem::Package::TarTestCase
300
295
  end
301
296
 
302
297
  def test_build_auto_signed_encrypted_key
303
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
298
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
304
299
 
305
- FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
300
+ FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
306
301
 
307
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
302
+ private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
308
303
  FileUtils.cp ENCRYPTED_PRIVATE_KEY_PATH, private_key_path
309
304
 
310
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
305
+ public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
311
306
  Gem::Security.write PUBLIC_CERT, public_cert_path
312
307
 
313
- spec = Gem::Specification.new 'build', '1'
314
- spec.summary = 'build'
315
- spec.authors = 'build'
316
- spec.files = ['lib/code.rb']
308
+ spec = Gem::Specification.new "build", "1"
309
+ spec.summary = "build"
310
+ spec.authors = "build"
311
+ spec.files = ["lib/code.rb"]
317
312
 
318
- FileUtils.mkdir 'lib'
313
+ FileUtils.mkdir "lib"
319
314
 
320
- File.open 'lib/code.rb', 'w' do |io|
321
- io.write '# lib/code.rb'
315
+ File.open "lib/code.rb", "w" do |io|
316
+ io.write "# lib/code.rb"
322
317
  end
323
318
 
324
319
  package = Gem::Package.new spec.file_name
@@ -327,7 +322,7 @@ class TestGemPackage < Gem::Package::TarTestCase
327
322
  package.build
328
323
 
329
324
  assert_equal Gem::VERSION, spec.rubygems_version
330
- assert_path_exists spec.file_name
325
+ assert_path_exist spec.file_name
331
326
 
332
327
  reader = Gem::Package.new spec.file_name
333
328
  assert reader.verify
@@ -343,25 +338,25 @@ class TestGemPackage < Gem::Package::TarTestCase
343
338
  end
344
339
 
345
340
  def test_build_invalid
346
- spec = Gem::Specification.new 'build', '1'
341
+ spec = Gem::Specification.new "build", "1"
347
342
 
348
343
  package = Gem::Package.new spec.file_name
349
344
  package.spec = spec
350
345
 
351
- e = assert_raises Gem::InvalidSpecificationException do
346
+ e = assert_raise Gem::InvalidSpecificationException do
352
347
  package.build
353
348
  end
354
349
 
355
- assert_equal 'missing value for attribute summary', e.message
350
+ assert_equal "missing value for attribute summary", e.message
356
351
  end
357
352
 
358
353
  def test_build_invalid_arguments
359
- spec = Gem::Specification.new 'build', '1'
354
+ spec = Gem::Specification.new "build", "1"
360
355
 
361
356
  package = Gem::Package.new spec.file_name
362
357
  package.spec = spec
363
358
 
364
- e = assert_raises ArgumentError do
359
+ e = assert_raise ArgumentError do
365
360
  package.build true, true
366
361
  end
367
362
 
@@ -369,19 +364,19 @@ class TestGemPackage < Gem::Package::TarTestCase
369
364
  end
370
365
 
371
366
  def test_build_signed
372
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
367
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
373
368
 
374
- spec = Gem::Specification.new 'build', '1'
375
- spec.summary = 'build'
376
- spec.authors = 'build'
377
- spec.files = ['lib/code.rb']
369
+ spec = Gem::Specification.new "build", "1"
370
+ spec.summary = "build"
371
+ spec.authors = "build"
372
+ spec.files = ["lib/code.rb"]
378
373
  spec.cert_chain = [PUBLIC_CERT.to_pem]
379
374
  spec.signing_key = PRIVATE_KEY
380
375
 
381
- FileUtils.mkdir 'lib'
376
+ FileUtils.mkdir "lib"
382
377
 
383
- File.open 'lib/code.rb', 'w' do |io|
384
- io.write '# lib/code.rb'
378
+ File.open "lib/code.rb", "w" do |io|
379
+ io.write "# lib/code.rb"
385
380
  end
386
381
 
387
382
  package = Gem::Package.new spec.file_name
@@ -390,7 +385,7 @@ class TestGemPackage < Gem::Package::TarTestCase
390
385
  package.build
391
386
 
392
387
  assert_equal Gem::VERSION, spec.rubygems_version
393
- assert_path_exists spec.file_name
388
+ assert_path_exist spec.file_name
394
389
 
395
390
  reader = Gem::Package.new spec.file_name
396
391
  assert reader.verify
@@ -406,19 +401,19 @@ class TestGemPackage < Gem::Package::TarTestCase
406
401
  end
407
402
 
408
403
  def test_build_signed_encrypted_key
409
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
404
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
410
405
 
411
- spec = Gem::Specification.new 'build', '1'
412
- spec.summary = 'build'
413
- spec.authors = 'build'
414
- spec.files = ['lib/code.rb']
406
+ spec = Gem::Specification.new "build", "1"
407
+ spec.summary = "build"
408
+ spec.authors = "build"
409
+ spec.files = ["lib/code.rb"]
415
410
  spec.cert_chain = [PUBLIC_CERT.to_pem]
416
411
  spec.signing_key = ENCRYPTED_PRIVATE_KEY
417
412
 
418
- FileUtils.mkdir 'lib'
413
+ FileUtils.mkdir "lib"
419
414
 
420
- File.open 'lib/code.rb', 'w' do |io|
421
- io.write '# lib/code.rb'
415
+ File.open "lib/code.rb", "w" do |io|
416
+ io.write "# lib/code.rb"
422
417
  end
423
418
 
424
419
  package = Gem::Package.new spec.file_name
@@ -427,7 +422,7 @@ class TestGemPackage < Gem::Package::TarTestCase
427
422
  package.build
428
423
 
429
424
  assert_equal Gem::VERSION, spec.rubygems_version
430
- assert_path_exists spec.file_name
425
+ assert_path_exist spec.file_name
431
426
 
432
427
  reader = Gem::Package.new spec.file_name
433
428
  assert reader.verify
@@ -443,14 +438,14 @@ class TestGemPackage < Gem::Package::TarTestCase
443
438
  end
444
439
 
445
440
  def test_raw_spec
446
- data_tgz = util_tar_gz { }
441
+ data_tgz = util_tar_gz {}
447
442
 
448
443
  gem = util_tar do |tar|
449
- tar.add_file 'data.tar.gz', 0644 do |io|
444
+ tar.add_file "data.tar.gz", 0644 do |io|
450
445
  io.write data_tgz.string
451
446
  end
452
447
 
453
- tar.add_file 'metadata.gz', 0644 do |io|
448
+ tar.add_file "metadata.gz", 0644 do |io|
454
449
  Zlib::GzipWriter.wrap io do |gzio|
455
450
  gzio.write @spec.to_yaml
456
451
  end
@@ -480,8 +475,8 @@ class TestGemPackage < Gem::Package::TarTestCase
480
475
 
481
476
  package.extract_files @destination
482
477
 
483
- extracted = File.join @destination, 'lib/code.rb'
484
- assert_path_exists extracted
478
+ extracted = File.join @destination, "lib/code.rb"
479
+ assert_path_exist extracted
485
480
 
486
481
  mask = 0100666 & (~File.umask)
487
482
 
@@ -490,41 +485,41 @@ class TestGemPackage < Gem::Package::TarTestCase
490
485
  end
491
486
 
492
487
  def test_extract_files_empty
493
- data_tgz = util_tar_gz { }
488
+ data_tgz = util_tar_gz {}
494
489
 
495
490
  gem = util_tar do |tar|
496
- tar.add_file 'data.tar.gz', 0644 do |io|
491
+ tar.add_file "data.tar.gz", 0644 do |io|
497
492
  io.write data_tgz.string
498
493
  end
499
494
 
500
- tar.add_file 'metadata.gz', 0644 do |io|
495
+ tar.add_file "metadata.gz", 0644 do |io|
501
496
  Zlib::GzipWriter.wrap io do |gzio|
502
497
  gzio.write @spec.to_yaml
503
498
  end
504
499
  end
505
500
  end
506
501
 
507
- File.open 'empty.gem', 'wb' do |io|
502
+ File.open "empty.gem", "wb" do |io|
508
503
  io.write gem.string
509
504
  end
510
505
 
511
- package = Gem::Package.new 'empty.gem'
506
+ package = Gem::Package.new "empty.gem"
512
507
 
513
508
  package.extract_files @destination
514
509
 
515
- assert_path_exists @destination
510
+ assert_path_exist @destination
516
511
  end
517
512
 
518
513
  def test_extract_tar_gz_absolute
519
514
  package = Gem::Package.new @gem
520
515
 
521
516
  tgz_io = util_tar_gz do |tar|
522
- tar.add_file '/absolute.rb', 0644 do |io|
523
- io.write 'hi'
517
+ tar.add_file "/absolute.rb", 0644 do |io|
518
+ io.write "hi"
524
519
  end
525
520
  end
526
521
 
527
- e = assert_raises Gem::Package::PathError do
522
+ e = assert_raise Gem::Package::PathError do
528
523
  package.extract_tar_gz tgz_io, @destination
529
524
  end
530
525
 
@@ -534,63 +529,86 @@ class TestGemPackage < Gem::Package::TarTestCase
534
529
 
535
530
  def test_extract_tar_gz_symlink_relative_path
536
531
  package = Gem::Package.new @gem
532
+ package.verify
537
533
 
538
534
  tgz_io = util_tar_gz do |tar|
539
- tar.add_file 'relative.rb', 0644 do |io|
540
- io.write 'hi'
535
+ tar.add_file "relative.rb", 0644 do |io|
536
+ io.write "hi"
541
537
  end
542
538
 
543
- tar.mkdir 'lib', 0755
544
- tar.add_symlink 'lib/foo.rb', '../relative.rb', 0644
539
+ tar.mkdir "lib", 0755
540
+ tar.add_symlink "lib/foo.rb", "../relative.rb", 0644
545
541
  end
546
542
 
547
543
  begin
548
544
  package.extract_tar_gz tgz_io, @destination
549
545
  rescue Errno::EACCES => e
550
546
  if win_platform?
551
- skip "symlink - must be admin with no UAC on Windows"
547
+ pend "symlink - must be admin with no UAC on Windows"
552
548
  else
553
549
  raise e
554
550
  end
555
551
  end
556
552
 
557
- extracted = File.join @destination, 'lib/foo.rb'
558
- assert_path_exists extracted
559
- assert_equal '../relative.rb',
553
+ extracted = File.join @destination, "lib/foo.rb"
554
+ assert_path_exist extracted
555
+ assert_equal "../relative.rb",
560
556
  File.readlink(extracted)
561
- assert_equal 'hi',
557
+ assert_equal "hi",
562
558
  File.read(extracted)
563
559
  end
564
560
 
561
+ def test_extract_tar_gz_symlink_broken_relative_path
562
+ package = Gem::Package.new @gem
563
+ package.verify
564
+
565
+ tgz_io = util_tar_gz do |tar|
566
+ tar.mkdir "lib", 0755
567
+ tar.add_symlink "lib/foo.rb", "../broken.rb", 0644
568
+ end
569
+
570
+ ui = Gem::MockGemUi.new
571
+
572
+ use_ui ui do
573
+ package.extract_tar_gz tgz_io, @destination
574
+ end
575
+
576
+ assert_equal "WARNING: a-2 ships with a dangling symlink named lib/foo.rb pointing to missing ../broken.rb file. Ignoring\n", ui.error
577
+
578
+ extracted = File.join @destination, "lib/foo.rb"
579
+ assert_path_not_exist extracted
580
+ end
581
+
565
582
  def test_extract_symlink_parent
566
583
  package = Gem::Package.new @gem
567
584
 
568
585
  tgz_io = util_tar_gz do |tar|
569
- tar.mkdir 'lib', 0755
570
- tar.add_symlink 'lib/link', '../..', 0644
571
- tar.add_file 'lib/link/outside.txt', 0644 do |io|
572
- io.write 'hi'
586
+ tar.mkdir "lib", 0755
587
+ tar.add_symlink "lib/link", "../..", 0644
588
+ tar.add_file "lib/link/outside.txt", 0644 do |io|
589
+ io.write "hi"
573
590
  end
574
591
  end
575
592
 
576
593
  # Extract into a subdirectory of @destination; if this test fails it writes
577
594
  # a file outside destination_subdir, but we want the file to remain inside
578
595
  # @destination so it will be cleaned up.
579
- destination_subdir = File.join @destination, 'subdir'
596
+ destination_subdir = File.join @destination, "subdir"
580
597
  FileUtils.mkdir_p destination_subdir
581
598
 
582
- e = assert_raises(Gem::Package::PathError, Errno::EACCES) do
599
+ expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
600
+
601
+ e = assert_raise(*expected_exceptions) do
583
602
  package.extract_tar_gz tgz_io, destination_subdir
584
603
  end
585
604
 
586
- if Gem::Package::PathError === e
587
- assert_equal("installing into parent path lib/link/outside.txt of " +
588
- "#{destination_subdir} is not allowed", e.message)
589
- elsif win_platform?
590
- skip "symlink - must be admin with no UAC on Windows"
591
- else
592
- raise e
593
- end
605
+ pend "symlink - must be admin with no UAC on Windows" if Errno::EACCES === e
606
+
607
+ assert_equal("installing symlink 'lib/link' pointing to parent path #{@destination} of " +
608
+ "#{destination_subdir} is not allowed", e.message)
609
+
610
+ assert_path_not_exist File.join(@destination, "outside.txt")
611
+ assert_path_not_exist File.join(destination_subdir, "lib/link")
594
612
  end
595
613
 
596
614
  def test_extract_symlink_parent_doesnt_delete_user_dir
@@ -599,82 +617,84 @@ class TestGemPackage < Gem::Package::TarTestCase
599
617
  # Extract into a subdirectory of @destination; if this test fails it writes
600
618
  # a file outside destination_subdir, but we want the file to remain inside
601
619
  # @destination so it will be cleaned up.
602
- destination_subdir = File.join @destination, 'subdir'
620
+ destination_subdir = File.join @destination, "subdir"
603
621
  FileUtils.mkdir_p destination_subdir
604
622
 
605
- destination_user_dir = File.join @destination, 'user'
606
- destination_user_subdir = File.join destination_user_dir, 'dir'
623
+ destination_user_dir = File.join @destination, "user"
624
+ destination_user_subdir = File.join destination_user_dir, "dir"
607
625
  FileUtils.mkdir_p destination_user_subdir
608
626
 
627
+ pend "TMPDIR seems too long to add it as symlink into tar" if destination_user_dir.size > 90
628
+
609
629
  tgz_io = util_tar_gz do |tar|
610
- tar.add_symlink 'link', destination_user_dir, 16877
611
- tar.add_symlink 'link/dir', '.', 16877
630
+ tar.add_symlink "link", destination_user_dir, 16877
631
+ tar.add_symlink "link/dir", ".", 16877
612
632
  end
613
633
 
614
- e = assert_raises(Gem::Package::PathError, Errno::EACCES) do
634
+ expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
635
+
636
+ e = assert_raise(*expected_exceptions) do
615
637
  package.extract_tar_gz tgz_io, destination_subdir
616
638
  end
617
639
 
618
- assert_path_exists destination_user_subdir
640
+ pend "symlink - must be admin with no UAC on Windows" if Errno::EACCES === e
619
641
 
620
- if Gem::Package::PathError === e
621
- assert_equal("installing into parent path #{destination_user_subdir} of " +
622
- "#{destination_subdir} is not allowed", e.message)
623
- elsif win_platform?
624
- skip "symlink - must be admin with no UAC on Windows"
625
- else
626
- raise e
627
- end
642
+ assert_equal("installing symlink 'link' pointing to parent path #{destination_user_dir} of " +
643
+ "#{destination_subdir} is not allowed", e.message)
644
+
645
+ assert_path_exist destination_user_subdir
646
+ assert_path_not_exist File.join(destination_subdir, "link/dir")
647
+ assert_path_not_exist File.join(destination_subdir, "link")
628
648
  end
629
649
 
630
650
  def test_extract_tar_gz_directory
631
651
  package = Gem::Package.new @gem
632
652
 
633
653
  tgz_io = util_tar_gz do |tar|
634
- tar.mkdir 'lib', 0755
635
- tar.add_file 'lib/foo.rb', 0644 do |io|
636
- io.write 'hi'
654
+ tar.mkdir "lib", 0755
655
+ tar.add_file "lib/foo.rb", 0644 do |io|
656
+ io.write "hi"
637
657
  end
638
- tar.mkdir 'lib/foo', 0755
658
+ tar.mkdir "lib/foo", 0755
639
659
  end
640
660
 
641
661
  package.extract_tar_gz tgz_io, @destination
642
662
 
643
- extracted = File.join @destination, 'lib/foo.rb'
644
- assert_path_exists extracted
663
+ extracted = File.join @destination, "lib/foo.rb"
664
+ assert_path_exist extracted
645
665
 
646
- extracted = File.join @destination, 'lib/foo'
647
- assert_path_exists extracted
666
+ extracted = File.join @destination, "lib/foo"
667
+ assert_path_exist extracted
648
668
  end
649
669
 
650
670
  def test_extract_tar_gz_dot_slash
651
671
  package = Gem::Package.new @gem
652
672
 
653
673
  tgz_io = util_tar_gz do |tar|
654
- tar.add_file './dot_slash.rb', 0644 do |io|
655
- io.write 'hi'
674
+ tar.add_file "./dot_slash.rb", 0644 do |io|
675
+ io.write "hi"
656
676
  end
657
677
  end
658
678
 
659
679
  package.extract_tar_gz tgz_io, @destination
660
680
 
661
- extracted = File.join @destination, 'dot_slash.rb'
662
- assert_path_exists extracted
681
+ extracted = File.join @destination, "dot_slash.rb"
682
+ assert_path_exist extracted
663
683
  end
664
684
 
665
685
  def test_extract_tar_gz_dot_file
666
686
  package = Gem::Package.new @gem
667
687
 
668
688
  tgz_io = util_tar_gz do |tar|
669
- tar.add_file '.dot_file.rb', 0644 do |io|
670
- io.write 'hi'
689
+ tar.add_file ".dot_file.rb", 0644 do |io|
690
+ io.write "hi"
671
691
  end
672
692
  end
673
693
 
674
694
  package.extract_tar_gz tgz_io, @destination
675
695
 
676
- extracted = File.join @destination, '.dot_file.rb'
677
- assert_path_exists extracted
696
+ extracted = File.join @destination, ".dot_file.rb"
697
+ assert_path_exist extracted
678
698
  end
679
699
 
680
700
  if Gem.win_platform?
@@ -682,35 +702,35 @@ class TestGemPackage < Gem::Package::TarTestCase
682
702
  package = Gem::Package.new @gem
683
703
 
684
704
  tgz_io = util_tar_gz do |tar|
685
- tar.add_file 'foo/file.rb', 0644 do |io|
686
- io.write 'hi'
705
+ tar.add_file "foo/file.rb", 0644 do |io|
706
+ io.write "hi"
687
707
  end
688
708
  end
689
709
 
690
710
  package.extract_tar_gz tgz_io, @destination.upcase
691
711
 
692
- extracted = File.join @destination, 'foo/file.rb'
693
- assert_path_exists extracted
712
+ extracted = File.join @destination, "foo/file.rb"
713
+ assert_path_exist extracted
694
714
  end
695
715
  end
696
716
 
697
717
  def test_install_location
698
718
  package = Gem::Package.new @gem
699
719
 
700
- file = 'file.rb'.dup
701
- file.taint if RUBY_VERSION < '2.7'
720
+ file = "file.rb".dup
721
+ file.taint if RUBY_VERSION < "2.7"
702
722
 
703
723
  destination = package.install_location file, @destination
704
724
 
705
- assert_equal File.join(@destination, 'file.rb'), destination
706
- refute destination.tainted? if RUBY_VERSION < '2.7'
725
+ assert_equal File.join(@destination, "file.rb"), destination
726
+ refute destination.tainted? if RUBY_VERSION < "2.7"
707
727
  end
708
728
 
709
729
  def test_install_location_absolute
710
730
  package = Gem::Package.new @gem
711
731
 
712
- e = assert_raises Gem::Package::PathError do
713
- package.install_location '/absolute.rb', @destination
732
+ e = assert_raise Gem::Package::PathError do
733
+ package.install_location "/absolute.rb", @destination
714
734
  end
715
735
 
716
736
  assert_equal("installing into parent path /absolute.rb of " +
@@ -720,38 +740,36 @@ class TestGemPackage < Gem::Package::TarTestCase
720
740
  def test_install_location_dots
721
741
  package = Gem::Package.new @gem
722
742
 
723
- file = 'file.rb'
743
+ file = "file.rb"
724
744
 
725
- destination = File.join @destination, 'foo', '..', 'bar'
745
+ destination = File.join @destination, "foo", "..", "bar"
726
746
 
727
- FileUtils.mkdir_p File.join @destination, 'foo'
747
+ FileUtils.mkdir_p File.join @destination, "foo"
728
748
  FileUtils.mkdir_p File.expand_path destination
729
749
 
730
750
  destination = package.install_location file, destination
731
751
 
732
752
  # this test only fails on ruby missing File.realpath
733
- assert_equal File.join(@destination, 'bar', 'file.rb'), destination
753
+ assert_equal File.join(@destination, "bar", "file.rb"), destination
734
754
  end
735
755
 
736
756
  def test_install_location_extra_slash
737
757
  package = Gem::Package.new @gem
738
758
 
739
- file = 'foo//file.rb'.dup
740
- file.taint if RUBY_VERSION < '2.7'
759
+ file = "foo//file.rb".dup
760
+ file.taint if RUBY_VERSION < "2.7"
741
761
 
742
- destination = @destination.sub '/', '//'
743
-
744
- destination = package.install_location file, destination
762
+ destination = package.install_location file, @destination
745
763
 
746
- assert_equal File.join(@destination, 'foo', 'file.rb'), destination
747
- refute destination.tainted? if RUBY_VERSION < '2.7'
764
+ assert_equal File.join(@destination, "foo", "file.rb"), destination
765
+ refute destination.tainted? if RUBY_VERSION < "2.7"
748
766
  end
749
767
 
750
768
  def test_install_location_relative
751
769
  package = Gem::Package.new @gem
752
770
 
753
- e = assert_raises Gem::Package::PathError do
754
- package.install_location '../relative.rb', @destination
771
+ e = assert_raise Gem::Package::PathError do
772
+ package.install_location "../relative.rb", @destination
755
773
  end
756
774
 
757
775
  parent = File.expand_path File.join @destination, "../relative.rb"
@@ -765,7 +783,7 @@ class TestGemPackage < Gem::Package::TarTestCase
765
783
 
766
784
  filename = "../#{File.basename(@destination)}suffix.rb"
767
785
 
768
- e = assert_raises Gem::Package::PathError do
786
+ e = assert_raise Gem::Package::PathError do
769
787
  package.install_location filename, @destination
770
788
  end
771
789
 
@@ -777,9 +795,9 @@ class TestGemPackage < Gem::Package::TarTestCase
777
795
 
778
796
  def test_load_spec
779
797
  entry = StringIO.new Gem::Util.gzip @spec.to_yaml
780
- def entry.full_name() 'metadata.gz' end
798
+ def entry.full_name() "metadata.gz" end
781
799
 
782
- package = Gem::Package.new 'nonexistent.gem'
800
+ package = Gem::Package.new "nonexistent.gem"
783
801
 
784
802
  spec = package.load_spec entry
785
803
 
@@ -798,8 +816,8 @@ class TestGemPackage < Gem::Package::TarTestCase
798
816
 
799
817
  def test_verify_checksum_bad
800
818
  data_tgz = util_tar_gz do |tar|
801
- tar.add_file 'lib/code.rb', 0444 do |io|
802
- io.write '# lib/code.rb'
819
+ tar.add_file "lib/code.rb", 0444 do |io|
820
+ io.write "# lib/code.rb"
803
821
  end
804
822
  end
805
823
 
@@ -808,45 +826,45 @@ class TestGemPackage < Gem::Package::TarTestCase
808
826
  gem = util_tar do |tar|
809
827
  metadata_gz = Gem::Util.gzip @spec.to_yaml
810
828
 
811
- tar.add_file 'metadata.gz', 0444 do |io|
829
+ tar.add_file "metadata.gz", 0444 do |io|
812
830
  io.write metadata_gz
813
831
  end
814
832
 
815
- tar.add_file 'data.tar.gz', 0444 do |io|
833
+ tar.add_file "data.tar.gz", 0444 do |io|
816
834
  io.write data_tgz
817
835
  end
818
836
 
819
837
  bogus_checksums = {
820
- 'SHA1' => {
821
- 'data.tar.gz' => 'bogus',
822
- 'metadata.gz' => 'bogus',
838
+ "SHA1" => {
839
+ "data.tar.gz" => "bogus",
840
+ "metadata.gz" => "bogus",
823
841
  },
824
842
  }
825
- tar.add_file 'checksums.yaml.gz', 0444 do |io|
843
+ tar.add_file "checksums.yaml.gz", 0444 do |io|
826
844
  Zlib::GzipWriter.wrap io do |gz_io|
827
- gz_io.write YAML.dump bogus_checksums
845
+ gz_io.write Psych.dump bogus_checksums
828
846
  end
829
847
  end
830
848
  end
831
849
 
832
- File.open 'mismatch.gem', 'wb' do |io|
850
+ File.open "mismatch.gem", "wb" do |io|
833
851
  io.write gem.string
834
852
  end
835
853
 
836
- package = Gem::Package.new 'mismatch.gem'
854
+ package = Gem::Package.new "mismatch.gem"
837
855
 
838
- e = assert_raises Gem::Package::FormatError do
856
+ e = assert_raise Gem::Package::FormatError do
839
857
  package.verify
840
858
  end
841
859
 
842
- assert_equal 'SHA1 checksum mismatch for data.tar.gz in mismatch.gem',
860
+ assert_equal "SHA1 checksum mismatch for data.tar.gz in mismatch.gem",
843
861
  e.message
844
862
  end
845
863
 
846
864
  def test_verify_checksum_missing
847
865
  data_tgz = util_tar_gz do |tar|
848
- tar.add_file 'lib/code.rb', 0444 do |io|
849
- io.write '# lib/code.rb'
866
+ tar.add_file "lib/code.rb", 0444 do |io|
867
+ io.write "# lib/code.rb"
850
868
  end
851
869
  end
852
870
 
@@ -855,51 +873,51 @@ class TestGemPackage < Gem::Package::TarTestCase
855
873
  gem = util_tar do |tar|
856
874
  metadata_gz = Gem::Util.gzip @spec.to_yaml
857
875
 
858
- tar.add_file 'metadata.gz', 0444 do |io|
876
+ tar.add_file "metadata.gz", 0444 do |io|
859
877
  io.write metadata_gz
860
878
  end
861
879
 
862
- digest = Digest::SHA1.new
880
+ digest = OpenSSL::Digest::SHA1.new
863
881
  digest << metadata_gz
864
882
 
865
883
  checksums = {
866
- 'SHA1' => {
867
- 'metadata.gz' => digest.hexdigest,
884
+ "SHA1" => {
885
+ "metadata.gz" => digest.hexdigest,
868
886
  },
869
887
  }
870
888
 
871
- tar.add_file 'checksums.yaml.gz', 0444 do |io|
889
+ tar.add_file "checksums.yaml.gz", 0444 do |io|
872
890
  Zlib::GzipWriter.wrap io do |gz_io|
873
- gz_io.write YAML.dump checksums
891
+ gz_io.write Psych.dump checksums
874
892
  end
875
893
  end
876
894
 
877
- tar.add_file 'data.tar.gz', 0444 do |io|
895
+ tar.add_file "data.tar.gz", 0444 do |io|
878
896
  io.write data_tgz
879
897
  end
880
898
  end
881
899
 
882
- File.open 'data_checksum_missing.gem', 'wb' do |io|
900
+ File.open "data_checksum_missing.gem", "wb" do |io|
883
901
  io.write gem.string
884
902
  end
885
903
 
886
- package = Gem::Package.new 'data_checksum_missing.gem'
904
+ package = Gem::Package.new "data_checksum_missing.gem"
887
905
 
888
906
  assert package.verify
889
907
  end
890
908
 
891
909
  def test_verify_corrupt
892
- skip "jruby strips the null byte and does not think it's corrupt" if Gem.java_platform?
893
- tf = Tempfile.open 'corrupt' do |io|
894
- data = Gem::Util.gzip 'a' * 10
910
+ pend "jruby strips the null byte and does not think it's corrupt" if Gem.java_platform?
911
+ tf = Tempfile.open "corrupt" do |io|
912
+ data = Gem::Util.gzip "a" * 10
895
913
  io.write \
896
- tar_file_header('metadata.gz', "\000x", 0644, data.length, Time.now)
914
+ tar_file_header("metadata.gz", "\000x", 0644, data.length, Time.now)
897
915
  io.write data
898
916
  io.rewind
899
917
 
900
918
  package = Gem::Package.new io.path
901
919
 
902
- e = assert_raises Gem::Package::FormatError do
920
+ e = assert_raise Gem::Package::FormatError do
903
921
  package.verify
904
922
  end
905
923
 
@@ -911,48 +929,48 @@ class TestGemPackage < Gem::Package::TarTestCase
911
929
  end
912
930
 
913
931
  def test_verify_empty
914
- FileUtils.touch 'empty.gem'
932
+ FileUtils.touch "empty.gem"
915
933
 
916
- package = Gem::Package.new 'empty.gem'
934
+ package = Gem::Package.new "empty.gem"
917
935
 
918
- e = assert_raises Gem::Package::FormatError do
936
+ e = assert_raise Gem::Package::FormatError do
919
937
  package.verify
920
938
  end
921
939
 
922
- assert_equal 'package metadata is missing in empty.gem', e.message
940
+ assert_equal "package metadata is missing in empty.gem", e.message
923
941
  end
924
942
 
925
943
  def test_verify_nonexistent
926
- package = Gem::Package.new 'nonexistent.gem'
944
+ package = Gem::Package.new "nonexistent.gem"
927
945
 
928
- e = assert_raises Gem::Package::FormatError do
946
+ e = assert_raise Gem::Package::FormatError do
929
947
  package.verify
930
948
  end
931
949
 
932
- assert_match %r%^No such file or directory%, e.message
933
- assert_match %r%nonexistent.gem$%, e.message
950
+ assert_match %r{^No such file or directory}, e.message
951
+ assert_match %r{nonexistent.gem$}, e.message
934
952
  end
935
953
 
936
954
  def test_verify_duplicate_file
937
- FileUtils.mkdir_p 'lib'
938
- FileUtils.touch 'lib/code.rb'
955
+ FileUtils.mkdir_p "lib"
956
+ FileUtils.touch "lib/code.rb"
939
957
 
940
958
  build = Gem::Package.new @gem
941
959
  build.spec = @spec
942
960
  build.setup_signer
943
- open @gem, 'wb' do |gem_io|
961
+ File.open @gem, "wb" do |gem_io|
944
962
  Gem::Package::TarWriter.new gem_io do |gem|
945
963
  build.add_metadata gem
946
964
  build.add_contents gem
947
965
 
948
- gem.add_file_simple 'a.sig', 0444, 0
949
- gem.add_file_simple 'a.sig', 0444, 0
966
+ gem.add_file_simple "a.sig", 0444, 0
967
+ gem.add_file_simple "a.sig", 0444, 0
950
968
  end
951
969
  end
952
970
 
953
971
  package = Gem::Package.new @gem
954
972
 
955
- e = assert_raises Gem::Security::Exception do
973
+ e = assert_raise Gem::Security::Exception do
956
974
  package.verify
957
975
  end
958
976
 
@@ -960,30 +978,30 @@ class TestGemPackage < Gem::Package::TarTestCase
960
978
  end
961
979
 
962
980
  def test_verify_security_policy
963
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
981
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
964
982
 
965
983
  package = Gem::Package.new @gem
966
984
  package.security_policy = Gem::Security::HighSecurity
967
985
 
968
- e = assert_raises Gem::Security::Exception do
986
+ e = assert_raise Gem::Security::Exception do
969
987
  package.verify
970
988
  end
971
989
 
972
- assert_equal 'unsigned gems are not allowed by the High Security policy',
990
+ assert_equal "unsigned gems are not allowed by the High Security policy",
973
991
  e.message
974
992
 
975
- refute package.instance_variable_get(:@spec), '@spec must not be loaded'
976
- assert_empty package.instance_variable_get(:@files), '@files must empty'
993
+ refute package.instance_variable_get(:@spec), "@spec must not be loaded"
994
+ assert_empty package.instance_variable_get(:@files), "@files must empty"
977
995
  end
978
996
 
979
997
  def test_verify_security_policy_low_security
980
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
998
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
981
999
 
982
1000
  @spec.cert_chain = [PUBLIC_CERT.to_pem]
983
1001
  @spec.signing_key = PRIVATE_KEY
984
1002
 
985
- FileUtils.mkdir_p 'lib'
986
- FileUtils.touch 'lib/code.rb'
1003
+ FileUtils.mkdir_p "lib"
1004
+ FileUtils.touch "lib/code.rb"
987
1005
 
988
1006
  build = Gem::Package.new @gem
989
1007
  build.spec = @spec
@@ -997,7 +1015,7 @@ class TestGemPackage < Gem::Package::TarTestCase
997
1015
  end
998
1016
 
999
1017
  def test_verify_security_policy_checksum_missing
1000
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
1018
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
1001
1019
 
1002
1020
  @spec.cert_chain = [PUBLIC_CERT.to_pem]
1003
1021
  @spec.signing_key = PRIVATE_KEY
@@ -1006,23 +1024,23 @@ class TestGemPackage < Gem::Package::TarTestCase
1006
1024
  build.spec = @spec
1007
1025
  build.setup_signer
1008
1026
 
1009
- FileUtils.mkdir 'lib'
1010
- FileUtils.touch 'lib/code.rb'
1027
+ FileUtils.mkdir "lib"
1028
+ FileUtils.touch "lib/code.rb"
1011
1029
 
1012
- File.open @gem, 'wb' do |gem_io|
1030
+ File.open @gem, "wb" do |gem_io|
1013
1031
  Gem::Package::TarWriter.new gem_io do |gem|
1014
1032
  build.add_metadata gem
1015
1033
  build.add_contents gem
1016
1034
 
1017
1035
  # write bogus data.tar.gz to foil signature
1018
- bogus_data = Gem::Util.gzip 'hello'
1036
+ bogus_data = Gem::Util.gzip "hello"
1019
1037
  fake_signer = Class.new do
1020
- def digest_name; 'SHA512'; end
1021
- def digest_algorithm; Digest(:SHA512); end
1022
- def key; 'key'; end
1023
- def sign(*); 'fake_sig'; end
1038
+ def digest_name; "SHA512"; end
1039
+ def digest_algorithm; OpenSSL::Digest(:SHA512).new; end
1040
+ def key; "key"; end
1041
+ def sign(*); "fake_sig"; end
1024
1042
  end
1025
- gem.add_file_signed 'data2.tar.gz', 0444, fake_signer.new do |io|
1043
+ gem.add_file_signed "data2.tar.gz", 0444, fake_signer.new do |io|
1026
1044
  io.write bogus_data
1027
1045
  end
1028
1046
 
@@ -1035,28 +1053,28 @@ class TestGemPackage < Gem::Package::TarTestCase
1035
1053
  package = Gem::Package.new @gem
1036
1054
  package.security_policy = Gem::Security::HighSecurity
1037
1055
 
1038
- e = assert_raises Gem::Security::Exception do
1056
+ e = assert_raise Gem::Security::Exception do
1039
1057
  package.verify
1040
1058
  end
1041
1059
 
1042
- assert_equal 'invalid signature', e.message
1060
+ assert_equal "invalid signature", e.message
1043
1061
 
1044
- refute package.instance_variable_get(:@spec), '@spec must not be loaded'
1045
- assert_empty package.instance_variable_get(:@files), '@files must empty'
1062
+ refute package.instance_variable_get(:@spec), "@spec must not be loaded"
1063
+ assert_empty package.instance_variable_get(:@files), "@files must empty"
1046
1064
  end
1047
1065
 
1048
1066
  def test_verify_truncate
1049
- File.open 'bad.gem', 'wb' do |io|
1067
+ File.open "bad.gem", "wb" do |io|
1050
1068
  io.write File.read(@gem, 1024) # don't care about newlines
1051
1069
  end
1052
1070
 
1053
- package = Gem::Package.new 'bad.gem'
1071
+ package = Gem::Package.new "bad.gem"
1054
1072
 
1055
- e = assert_raises Gem::Package::FormatError do
1073
+ e = assert_raise Gem::Package::FormatError do
1056
1074
  package.verify
1057
1075
  end
1058
1076
 
1059
- assert_equal 'package content (data.tar.gz) is missing in bad.gem',
1077
+ assert_equal "package content (data.tar.gz) is missing in bad.gem",
1060
1078
  e.message
1061
1079
  end
1062
1080
 
@@ -1064,15 +1082,26 @@ class TestGemPackage < Gem::Package::TarTestCase
1064
1082
 
1065
1083
  def test_verify_entry
1066
1084
  entry = Object.new
1067
- def entry.full_name() raise ArgumentError, 'whatever' end
1085
+ def entry.full_name() raise ArgumentError, "whatever" end
1068
1086
 
1069
1087
  package = Gem::Package.new @gem
1070
1088
 
1071
- e = assert_raises Gem::Package::FormatError do
1072
- package.verify_entry entry
1089
+ _, err = use_ui @ui do
1090
+ e = nil
1091
+
1092
+ out_err = capture_output do
1093
+ e = assert_raise ArgumentError do
1094
+ package.verify_entry entry
1095
+ end
1096
+ end
1097
+
1098
+ assert_equal "whatever", e.message
1099
+ assert_equal "full_name", e.backtrace_locations.first.label
1100
+
1101
+ out_err
1073
1102
  end
1074
1103
 
1075
- assert_equal "package is corrupt, exception while verifying: whatever (ArgumentError) in #{@gem}", e.message
1104
+ assert_equal "Exception while verifying #{@gem}\n", err
1076
1105
 
1077
1106
  valid_metadata = ["metadata", "metadata.gz"]
1078
1107
  valid_metadata.each do |vm|
@@ -1097,7 +1126,7 @@ class TestGemPackage < Gem::Package::TarTestCase
1097
1126
  $bad_name = vm
1098
1127
 
1099
1128
  entry = Object.new
1100
- def entry.full_name() $bad_name end
1129
+ def entry.full_name() $bad_name end
1101
1130
 
1102
1131
  package = Gem::Package.new(@gem)
1103
1132
  package.instance_variable_set(:@files, [])
@@ -1132,11 +1161,18 @@ class TestGemPackage < Gem::Package::TarTestCase
1132
1161
  def test_spec_from_io_raises_gem_error_for_io_not_at_start
1133
1162
  io = StringIO.new Gem.read_binary @gem
1134
1163
  io.read(1)
1135
- assert_raises(Gem::Package::Error) do
1164
+ assert_raise(Gem::Package::Error) do
1136
1165
  Gem::Package.new io
1137
1166
  end
1138
1167
  end
1139
1168
 
1169
+ def test_contents_from_io
1170
+ io = StringIO.new Gem.read_binary @gem
1171
+ package = Gem::Package.new io
1172
+
1173
+ assert_equal %w[lib/code.rb], package.contents
1174
+ end
1175
+
1140
1176
  def util_tar
1141
1177
  tar_io = StringIO.new
1142
1178
 
@@ -1161,5 +1197,4 @@ class TestGemPackage < Gem::Package::TarTestCase
1161
1197
 
1162
1198
  StringIO.new tgz_io.string
1163
1199
  end
1164
-
1165
1200
  end