rubygems-update 3.3.18 → 3.4.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (615) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1429 -1064
  3. data/CONTRIBUTING.md +31 -8
  4. data/Manifest.txt +61 -36
  5. data/POLICIES.md +55 -20
  6. data/README.md +19 -6
  7. data/bundler/CHANGELOG.md +457 -1
  8. data/bundler/README.md +3 -6
  9. data/bundler/UPGRADING.md +11 -4
  10. data/bundler/bundler.gemspec +8 -10
  11. data/bundler/exe/bundle +5 -16
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/add.rb +1 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +2 -0
  17. data/bundler/lib/bundler/cli/console.rb +2 -2
  18. data/bundler/lib/bundler/cli/doctor.rb +4 -6
  19. data/bundler/lib/bundler/cli/gem.rb +62 -40
  20. data/bundler/lib/bundler/cli/info.rb +1 -1
  21. data/bundler/lib/bundler/cli/init.rb +6 -2
  22. data/bundler/lib/bundler/cli/install.rb +8 -6
  23. data/bundler/lib/bundler/cli/lock.rb +8 -5
  24. data/bundler/lib/bundler/cli/open.rb +6 -4
  25. data/bundler/lib/bundler/cli/outdated.rb +14 -7
  26. data/bundler/lib/bundler/cli/platform.rb +7 -5
  27. data/bundler/lib/bundler/cli/viz.rb +1 -1
  28. data/bundler/lib/bundler/cli.rb +53 -7
  29. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  30. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  31. data/bundler/lib/bundler/constants.rb +1 -1
  32. data/bundler/lib/bundler/current_ruby.rb +16 -5
  33. data/bundler/lib/bundler/definition.rb +262 -133
  34. data/bundler/lib/bundler/dependency.rb +20 -86
  35. data/bundler/lib/bundler/digest.rb +1 -1
  36. data/bundler/lib/bundler/dsl.rb +6 -7
  37. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  38. data/bundler/lib/bundler/env.rb +2 -2
  39. data/bundler/lib/bundler/environment_preserver.rb +3 -2
  40. data/bundler/lib/bundler/errors.rb +1 -11
  41. data/bundler/lib/bundler/feature_flag.rb +0 -2
  42. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
  43. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  44. data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
  45. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  46. data/bundler/lib/bundler/fetcher.rb +21 -15
  47. data/bundler/lib/bundler/force_platform.rb +18 -0
  48. data/bundler/lib/bundler/friendly_errors.rb +1 -4
  49. data/bundler/lib/bundler/gem_helper.rb +3 -4
  50. data/bundler/lib/bundler/gem_helpers.rb +7 -2
  51. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  52. data/bundler/lib/bundler/graph.rb +3 -3
  53. data/bundler/lib/bundler/index.rb +13 -47
  54. data/bundler/lib/bundler/injector.rb +5 -4
  55. data/bundler/lib/bundler/inline.rb +9 -11
  56. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
  57. data/bundler/lib/bundler/installer/standalone.rb +13 -9
  58. data/bundler/lib/bundler/installer.rb +17 -29
  59. data/bundler/lib/bundler/lazy_specification.rb +54 -53
  60. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  61. data/bundler/lib/bundler/lockfile_parser.rb +17 -16
  62. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  63. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  64. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
  66. data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
  67. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  69. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  70. data/bundler/lib/bundler/man/bundle-config.1 +26 -10
  71. data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
  72. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  73. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  74. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  76. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  77. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  78. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  79. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  80. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  81. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  82. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  83. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  84. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  85. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  86. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  87. data/bundler/lib/bundler/man/bundle-install.1 +5 -30
  88. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
  89. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  90. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  91. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  92. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  94. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  95. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  96. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  97. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  98. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  99. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  102. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  103. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  104. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  105. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  106. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  107. data/bundler/lib/bundler/man/bundle.1 +15 -10
  108. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  109. data/bundler/lib/bundler/man/gemfile.5 +55 -55
  110. data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
  111. data/bundler/lib/bundler/man/index.txt +4 -0
  112. data/bundler/lib/bundler/match_metadata.rb +13 -0
  113. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  114. data/bundler/lib/bundler/mirror.rb +5 -7
  115. data/bundler/lib/bundler/plugin/index.rb +5 -5
  116. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  117. data/bundler/lib/bundler/plugin/installer.rb +5 -2
  118. data/bundler/lib/bundler/plugin.rb +3 -1
  119. data/bundler/lib/bundler/remote_specification.rb +7 -12
  120. data/bundler/lib/bundler/resolver/base.rb +107 -0
  121. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  122. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  123. data/bundler/lib/bundler/resolver/package.rb +72 -0
  124. data/bundler/lib/bundler/resolver/root.rb +25 -0
  125. data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
  126. data/bundler/lib/bundler/resolver.rb +335 -328
  127. data/bundler/lib/bundler/ruby_dsl.rb +7 -1
  128. data/bundler/lib/bundler/ruby_version.rb +8 -8
  129. data/bundler/lib/bundler/rubygems_ext.rb +100 -9
  130. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
  131. data/bundler/lib/bundler/rubygems_integration.rb +11 -15
  132. data/bundler/lib/bundler/runtime.rb +2 -6
  133. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  134. data/bundler/lib/bundler/settings.rb +5 -11
  135. data/bundler/lib/bundler/setup.rb +4 -1
  136. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  137. data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
  138. data/bundler/lib/bundler/source/git.rb +55 -30
  139. data/bundler/lib/bundler/source/metadata.rb +1 -2
  140. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  141. data/bundler/lib/bundler/source/path.rb +6 -6
  142. data/bundler/lib/bundler/source/rubygems.rb +26 -81
  143. data/bundler/lib/bundler/source.rb +1 -1
  144. data/bundler/lib/bundler/source_list.rb +8 -2
  145. data/bundler/lib/bundler/spec_set.rb +60 -37
  146. data/bundler/lib/bundler/templates/Executable +1 -1
  147. data/bundler/lib/bundler/templates/Executable.bundler +5 -10
  148. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  149. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  150. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  151. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  152. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  153. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  154. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  155. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  156. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  157. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  158. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  159. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  160. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  161. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  162. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  163. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
  164. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  165. data/bundler/lib/bundler/ui/shell.rb +35 -12
  166. data/bundler/lib/bundler/ui/silent.rb +21 -5
  167. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  168. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  169. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  170. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  171. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
  172. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  173. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  174. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  175. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  176. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  177. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  178. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  184. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  185. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  186. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  187. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  188. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  189. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  190. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  192. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  193. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  194. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  195. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  196. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  197. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  207. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  208. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  209. data/bundler/lib/bundler/version.rb +5 -1
  210. data/bundler/lib/bundler/worker.rb +5 -7
  211. data/bundler/lib/bundler.rb +25 -77
  212. data/{bin → exe}/gem +4 -5
  213. data/{bin → exe}/update_rubygems +12 -10
  214. data/lib/rubygems/available_set.rb +4 -3
  215. data/lib/rubygems/basic_specification.rb +5 -4
  216. data/lib/rubygems/bundler_version_finder.rb +2 -2
  217. data/lib/rubygems/command.rb +41 -32
  218. data/lib/rubygems/command_manager.rb +30 -15
  219. data/lib/rubygems/commands/build_command.rb +12 -8
  220. data/lib/rubygems/commands/cert_command.rb +34 -33
  221. data/lib/rubygems/commands/check_command.rb +21 -20
  222. data/lib/rubygems/commands/cleanup_command.rb +18 -17
  223. data/lib/rubygems/commands/contents_command.rb +14 -13
  224. data/lib/rubygems/commands/dependency_command.rb +17 -16
  225. data/lib/rubygems/commands/environment_command.rb +6 -5
  226. data/lib/rubygems/commands/exec_command.rb +249 -0
  227. data/lib/rubygems/commands/fetch_command.rb +10 -9
  228. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  229. data/lib/rubygems/commands/help_command.rb +7 -6
  230. data/lib/rubygems/commands/info_command.rb +3 -3
  231. data/lib/rubygems/commands/install_command.rb +28 -23
  232. data/lib/rubygems/commands/list_command.rb +4 -3
  233. data/lib/rubygems/commands/lock_command.rb +5 -4
  234. data/lib/rubygems/commands/mirror_command.rb +4 -3
  235. data/lib/rubygems/commands/open_command.rb +10 -9
  236. data/lib/rubygems/commands/outdated_command.rb +6 -5
  237. data/lib/rubygems/commands/owner_command.rb +17 -14
  238. data/lib/rubygems/commands/pristine_command.rb +46 -36
  239. data/lib/rubygems/commands/push_command.rb +9 -8
  240. data/lib/rubygems/commands/query_command.rb +9 -8
  241. data/lib/rubygems/commands/rdoc_command.rb +21 -19
  242. data/lib/rubygems/commands/search_command.rb +4 -3
  243. data/lib/rubygems/commands/server_command.rb +4 -3
  244. data/lib/rubygems/commands/setup_command.rb +97 -106
  245. data/lib/rubygems/commands/signin_command.rb +10 -9
  246. data/lib/rubygems/commands/signout_command.rb +8 -7
  247. data/lib/rubygems/commands/sources_command.rb +22 -21
  248. data/lib/rubygems/commands/specification_command.rb +14 -13
  249. data/lib/rubygems/commands/stale_command.rb +3 -2
  250. data/lib/rubygems/commands/uninstall_command.rb +44 -40
  251. data/lib/rubygems/commands/unpack_command.rb +14 -13
  252. data/lib/rubygems/commands/update_command.rb +42 -63
  253. data/lib/rubygems/commands/which_command.rb +8 -7
  254. data/lib/rubygems/commands/yank_command.rb +12 -11
  255. data/lib/rubygems/config_file.rb +55 -21
  256. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  257. data/lib/rubygems/core_ext/kernel_require.rb +109 -115
  258. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  259. data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
  260. data/lib/rubygems/defaults.rb +33 -18
  261. data/lib/rubygems/dependency.rb +15 -11
  262. data/lib/rubygems/dependency_installer.rb +38 -37
  263. data/lib/rubygems/dependency_list.rb +7 -6
  264. data/lib/rubygems/deprecate.rb +3 -2
  265. data/lib/rubygems/doctor.rb +19 -18
  266. data/lib/rubygems/errors.rb +3 -2
  267. data/lib/rubygems/exceptions.rb +16 -8
  268. data/lib/rubygems/ext/build_error.rb +2 -1
  269. data/lib/rubygems/ext/builder.rb +37 -21
  270. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  271. data/lib/rubygems/ext/cargo_builder.rb +150 -111
  272. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  273. data/lib/rubygems/ext/configure_builder.rb +2 -1
  274. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  275. data/lib/rubygems/ext/rake_builder.rb +7 -5
  276. data/lib/rubygems/ext.rb +8 -7
  277. data/lib/rubygems/gem_runner.rb +6 -5
  278. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  279. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  280. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  281. data/lib/rubygems/gemcutter_utilities.rb +90 -34
  282. data/lib/rubygems/indexer.rb +29 -28
  283. data/lib/rubygems/install_default_message.rb +3 -2
  284. data/lib/rubygems/install_message.rb +3 -2
  285. data/lib/rubygems/install_update_options.rb +56 -55
  286. data/lib/rubygems/installer.rb +54 -46
  287. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  288. data/lib/rubygems/local_remote_options.rb +19 -20
  289. data/lib/rubygems/mock_gem_ui.rb +3 -2
  290. data/lib/rubygems/name_tuple.rb +5 -4
  291. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  292. data/lib/rubygems/optparse.rb +1 -1
  293. data/lib/rubygems/package/digest_io.rb +1 -0
  294. data/lib/rubygems/package/file_source.rb +3 -2
  295. data/lib/rubygems/package/io_source.rb +1 -0
  296. data/lib/rubygems/package/old.rb +9 -8
  297. data/lib/rubygems/package/source.rb +1 -0
  298. data/lib/rubygems/package/tar_header.rb +63 -62
  299. data/lib/rubygems/package/tar_reader/entry.rb +91 -9
  300. data/lib/rubygems/package/tar_reader.rb +2 -29
  301. data/lib/rubygems/package/tar_writer.rb +8 -7
  302. data/lib/rubygems/package.rb +64 -48
  303. data/lib/rubygems/package_task.rb +5 -4
  304. data/lib/rubygems/path_support.rb +1 -0
  305. data/lib/rubygems/platform.rb +79 -53
  306. data/lib/rubygems/psych_tree.rb +2 -1
  307. data/lib/rubygems/query_utils.rb +35 -35
  308. data/lib/rubygems/rdoc.rb +3 -2
  309. data/lib/rubygems/remote_fetcher.rb +23 -22
  310. data/lib/rubygems/request/connection_pools.rb +4 -4
  311. data/lib/rubygems/request/http_pool.rb +2 -1
  312. data/lib/rubygems/request/https_pool.rb +1 -0
  313. data/lib/rubygems/request.rb +23 -22
  314. data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
  315. data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
  316. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
  317. data/lib/rubygems/request_set/lockfile.rb +6 -5
  318. data/lib/rubygems/request_set.rb +20 -19
  319. data/lib/rubygems/requirement.rb +15 -14
  320. data/lib/rubygems/resolver/activation_request.rb +4 -3
  321. data/lib/rubygems/resolver/api_set.rb +5 -4
  322. data/lib/rubygems/resolver/api_specification.rb +7 -6
  323. data/lib/rubygems/resolver/best_set.rb +6 -5
  324. data/lib/rubygems/resolver/composed_set.rb +1 -0
  325. data/lib/rubygems/resolver/conflict.rb +11 -10
  326. data/lib/rubygems/resolver/current_set.rb +1 -0
  327. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  328. data/lib/rubygems/resolver/git_set.rb +3 -2
  329. data/lib/rubygems/resolver/git_specification.rb +7 -6
  330. data/lib/rubygems/resolver/index_set.rb +4 -3
  331. data/lib/rubygems/resolver/index_specification.rb +7 -5
  332. data/lib/rubygems/resolver/installed_specification.rb +5 -4
  333. data/lib/rubygems/resolver/installer_set.rb +15 -17
  334. data/lib/rubygems/resolver/local_specification.rb +3 -2
  335. data/lib/rubygems/resolver/lock_set.rb +5 -4
  336. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  340. data/lib/rubygems/resolver/molinillo.rb +2 -1
  341. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  342. data/lib/rubygems/resolver/set.rb +1 -0
  343. data/lib/rubygems/resolver/source_set.rb +2 -0
  344. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  345. data/lib/rubygems/resolver/specification.rb +2 -1
  346. data/lib/rubygems/resolver/stats.rb +2 -1
  347. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  348. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  349. data/lib/rubygems/resolver.rb +41 -40
  350. data/lib/rubygems/s3_uri_signer.rb +10 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -2
  352. data/lib/rubygems/security/policies.rb +48 -47
  353. data/lib/rubygems/security/policy.rb +19 -18
  354. data/lib/rubygems/security/signer.rb +6 -5
  355. data/lib/rubygems/security/trust_dir.rb +5 -4
  356. data/lib/rubygems/security.rb +30 -42
  357. data/lib/rubygems/security_option.rb +6 -5
  358. data/lib/rubygems/shellwords.rb +3 -0
  359. data/lib/rubygems/source/git.rb +22 -22
  360. data/lib/rubygems/source/installed.rb +2 -1
  361. data/lib/rubygems/source/local.rb +3 -2
  362. data/lib/rubygems/source/lock.rb +1 -0
  363. data/lib/rubygems/source/specific_file.rb +2 -1
  364. data/lib/rubygems/source/vendor.rb +1 -0
  365. data/lib/rubygems/source.rb +16 -16
  366. data/lib/rubygems/spec_fetcher.rb +10 -9
  367. data/lib/rubygems/specification.rb +121 -114
  368. data/lib/rubygems/specification_policy.rb +36 -15
  369. data/lib/rubygems/stub_specification.rb +11 -9
  370. data/lib/rubygems/text.rb +2 -2
  371. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  372. data/lib/rubygems/tsort.rb +1 -1
  373. data/lib/rubygems/uninstaller.rb +19 -18
  374. data/lib/rubygems/update_suggestion.rb +69 -0
  375. data/lib/rubygems/uri.rb +4 -4
  376. data/lib/rubygems/uri_formatter.rb +1 -1
  377. data/lib/rubygems/user_interaction.rb +37 -21
  378. data/lib/rubygems/util/licenses.rb +4 -3
  379. data/lib/rubygems/util/list.rb +1 -0
  380. data/lib/rubygems/util.rb +12 -15
  381. data/lib/rubygems/validator.rb +7 -6
  382. data/lib/rubygems/version.rb +17 -11
  383. data/lib/rubygems/version_option.rb +4 -3
  384. data/lib/rubygems.rb +89 -68
  385. data/rubygems-update.gemspec +10 -8
  386. data/setup.rb +10 -9
  387. data/test/rubygems/alternate_cert.pem +14 -14
  388. data/test/rubygems/alternate_cert_32.pem +15 -15
  389. data/test/rubygems/alternate_key.pem +25 -25
  390. data/test/rubygems/bad_rake.rb +1 -0
  391. data/test/rubygems/bundler_test_gem.rb +421 -0
  392. data/test/rubygems/child_cert.pem +15 -16
  393. data/test/rubygems/child_cert_32.pem +15 -16
  394. data/test/rubygems/child_key.pem +25 -25
  395. data/test/rubygems/encrypted_private_key.pem +26 -26
  396. data/test/rubygems/expired_cert.pem +15 -15
  397. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  398. data/test/rubygems/future_cert.pem +15 -15
  399. data/test/rubygems/future_cert_32.pem +15 -15
  400. data/test/rubygems/good_rake.rb +1 -0
  401. data/test/rubygems/grandchild_cert.pem +15 -16
  402. data/test/rubygems/grandchild_cert_32.pem +15 -16
  403. data/test/rubygems/grandchild_key.pem +25 -25
  404. data/test/rubygems/helper.rb +172 -151
  405. data/test/rubygems/installer_test_case.rb +14 -13
  406. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  407. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  408. data/test/rubygems/invalid_key.pem +25 -25
  409. data/test/rubygems/invalid_signer_cert.pem +15 -15
  410. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  411. data/test/rubygems/invalidchild_cert.pem +15 -16
  412. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  413. data/test/rubygems/invalidchild_key.pem +25 -25
  414. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  415. data/test/rubygems/package/tar_test_case.rb +53 -17
  416. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  417. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  418. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  419. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  420. data/test/rubygems/private_key.pem +25 -25
  421. data/test/rubygems/public_cert.pem +16 -16
  422. data/test/rubygems/public_cert_32.pem +15 -15
  423. data/test/rubygems/public_key.pem +7 -7
  424. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  425. data/test/rubygems/rubygems_plugin.rb +3 -2
  426. data/test/rubygems/simple_gem.rb +2 -1
  427. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  428. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
  429. data/test/rubygems/test_bundled_ca.rb +13 -12
  430. data/test/rubygems/test_config.rb +5 -4
  431. data/test/rubygems/test_deprecate.rb +5 -4
  432. data/test/rubygems/test_exit.rb +9 -3
  433. data/test/rubygems/test_gem.rb +339 -677
  434. data/test/rubygems/test_gem_available_set.rb +22 -21
  435. data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
  436. data/test/rubygems/test_gem_command.rb +45 -44
  437. data/test/rubygems/test_gem_command_manager.rb +96 -30
  438. data/test/rubygems/test_gem_commands_build_command.rb +74 -63
  439. data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
  440. data/test/rubygems/test_gem_commands_check_command.rb +5 -4
  441. data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
  442. data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
  443. data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
  444. data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
  445. data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
  446. data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
  447. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
  448. data/test/rubygems/test_gem_commands_help_command.rb +14 -13
  449. data/test/rubygems/test_gem_commands_info_command.rb +29 -2
  450. data/test/rubygems/test_gem_commands_install_command.rb +152 -132
  451. data/test/rubygems/test_gem_commands_list_command.rb +5 -4
  452. data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
  453. data/test/rubygems/test_gem_commands_mirror.rb +3 -2
  454. data/test/rubygems/test_gem_commands_open_command.rb +5 -4
  455. data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
  456. data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
  457. data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
  458. data/test/rubygems/test_gem_commands_push_command.rb +189 -64
  459. data/test/rubygems/test_gem_commands_query_command.rb +74 -73
  460. data/test/rubygems/test_gem_commands_search_command.rb +3 -2
  461. data/test/rubygems/test_gem_commands_server_command.rb +3 -2
  462. data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
  463. data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
  464. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  465. data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
  466. data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
  467. data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
  468. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
  469. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
  470. data/test/rubygems/test_gem_commands_update_command.rb +96 -95
  471. data/test/rubygems/test_gem_commands_which_command.rb +7 -6
  472. data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
  473. data/test/rubygems/test_gem_config_file.rb +94 -81
  474. data/test/rubygems/test_gem_dependency.rb +76 -73
  475. data/test/rubygems/test_gem_dependency_installer.rb +200 -165
  476. data/test/rubygems/test_gem_dependency_list.rb +48 -47
  477. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
  478. data/test/rubygems/test_gem_doctor.rb +27 -26
  479. data/test/rubygems/test_gem_ext_builder.rb +60 -61
  480. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
  481. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
  482. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
  483. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
  484. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  485. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
  486. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  487. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  488. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  489. data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
  490. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
  491. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
  492. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
  493. data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
  494. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  495. data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
  496. data/test/rubygems/test_gem_gem_runner.rb +15 -9
  497. data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
  498. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
  499. data/test/rubygems/test_gem_indexer.rb +87 -67
  500. data/test/rubygems/test_gem_install_update_options.rb +17 -16
  501. data/test/rubygems/test_gem_installer.rb +422 -304
  502. data/test/rubygems/test_gem_local_remote_options.rb +11 -10
  503. data/test/rubygems/test_gem_name_tuple.rb +5 -4
  504. data/test/rubygems/test_gem_package.rb +243 -231
  505. data/test/rubygems/test_gem_package_old.rb +14 -13
  506. data/test/rubygems/test_gem_package_tar_header.rb +48 -47
  507. data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
  508. data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
  509. data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
  510. data/test/rubygems/test_gem_package_task.rb +19 -18
  511. data/test/rubygems/test_gem_path_support.rb +15 -14
  512. data/test/rubygems/test_gem_platform.rb +333 -227
  513. data/test/rubygems/test_gem_rdoc.rb +15 -14
  514. data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
  515. data/test/rubygems/test_gem_request.rb +64 -58
  516. data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
  517. data/test/rubygems/test_gem_request_set.rb +101 -100
  518. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
  519. data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
  520. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
  521. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
  522. data/test/rubygems/test_gem_requirement.rb +48 -41
  523. data/test/rubygems/test_gem_resolver.rb +167 -99
  524. data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
  525. data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
  526. data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
  527. data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
  528. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
  529. data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
  530. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
  531. data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
  532. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
  533. data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
  534. data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
  535. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
  536. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
  537. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
  538. data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
  539. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
  540. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
  541. data/test/rubygems/test_gem_resolver_specification.rb +9 -8
  542. data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
  543. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
  544. data/test/rubygems/test_gem_security.rb +69 -68
  545. data/test/rubygems/test_gem_security_policy.rb +72 -72
  546. data/test/rubygems/test_gem_security_signer.rb +35 -34
  547. data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
  548. data/test/rubygems/test_gem_silent_ui.rb +39 -32
  549. data/test/rubygems/test_gem_source.rb +45 -44
  550. data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
  551. data/test/rubygems/test_gem_source_git.rb +69 -62
  552. data/test/rubygems/test_gem_source_installed.rb +17 -16
  553. data/test/rubygems/test_gem_source_list.rb +6 -5
  554. data/test/rubygems/test_gem_source_local.rb +15 -14
  555. data/test/rubygems/test_gem_source_lock.rb +32 -31
  556. data/test/rubygems/test_gem_source_specific_file.rb +18 -17
  557. data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
  558. data/test/rubygems/test_gem_source_vendor.rb +14 -13
  559. data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
  560. data/test/rubygems/test_gem_specification.rb +533 -469
  561. data/test/rubygems/test_gem_stream_ui.rb +53 -22
  562. data/test/rubygems/test_gem_stub_specification.rb +33 -32
  563. data/test/rubygems/test_gem_text.rb +2 -1
  564. data/test/rubygems/test_gem_uninstaller.rb +118 -117
  565. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
  566. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  567. data/test/rubygems/test_gem_uri.rb +6 -4
  568. data/test/rubygems/test_gem_uri_formatter.rb +15 -14
  569. data/test/rubygems/test_gem_util.rb +24 -23
  570. data/test/rubygems/test_gem_validator.rb +8 -8
  571. data/test/rubygems/test_gem_version.rb +24 -16
  572. data/test/rubygems/test_gem_version_option.rb +16 -15
  573. data/test/rubygems/test_kernel.rb +43 -48
  574. data/test/rubygems/test_project_sanity.rb +32 -3
  575. data/test/rubygems/test_remote_fetch_error.rb +8 -7
  576. data/test/rubygems/test_require.rb +118 -103
  577. data/test/rubygems/test_rubygems.rb +10 -8
  578. data/test/rubygems/test_webauthn_listener.rb +143 -0
  579. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  580. data/test/rubygems/test_webauthn_poller.rb +124 -0
  581. data/test/rubygems/utilities.rb +98 -34
  582. data/test/rubygems/wrong_key_cert.pem +15 -15
  583. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  584. data/test/test_changelog_generator.rb +1 -1
  585. metadata +99 -46
  586. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  587. data/bundler/lib/bundler/templates/gems.rb +0 -5
  588. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  589. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  590. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  591. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  592. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  593. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  594. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  595. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  596. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  597. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  598. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  599. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  600. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  601. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  602. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  603. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  604. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  605. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  606. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  608. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  609. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  610. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  611. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  612. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  613. data/bundler/lib/bundler/version_ranges.rb +0 -122
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  615. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'package/tar_test_case'
4
- require 'rubygems/openssl'
3
+ require_relative "package/tar_test_case"
4
+ require "rubygems/openssl"
5
5
 
6
6
  class TestGemPackage < Gem::Package::TarTestCase
7
7
  def setup
8
8
  super
9
9
 
10
- @spec = quick_gem 'a' do |s|
11
- s.description = 'π'
10
+ @spec = quick_gem "a" do |s|
11
+ s.description = "π"
12
12
  s.files = %w[lib/code.rb]
13
13
  end
14
14
 
@@ -16,7 +16,7 @@ class TestGemPackage < Gem::Package::TarTestCase
16
16
 
17
17
  @gem = @spec.cache_file
18
18
 
19
- @destination = File.join @tempdir, 'extract'
19
+ @destination = File.join @tempdir, "extract"
20
20
 
21
21
  FileUtils.mkdir_p @destination
22
22
  end
@@ -24,11 +24,11 @@ class TestGemPackage < Gem::Package::TarTestCase
24
24
  def test_class_new_old_format
25
25
  pend "jruby can't require the simple_gem file" if Gem.java_platform?
26
26
  require_relative "simple_gem"
27
- File.open 'old_format.gem', 'wb' do |io|
27
+ File.open "old_format.gem", "wb" do |io|
28
28
  io.write SIMPLE_GEM
29
29
  end
30
30
 
31
- package = Gem::Package.new 'old_format.gem'
31
+ package = Gem::Package.new "old_format.gem"
32
32
 
33
33
  assert package.spec
34
34
  end
@@ -36,17 +36,17 @@ class TestGemPackage < Gem::Package::TarTestCase
36
36
  def test_add_checksums
37
37
  gem_io = StringIO.new
38
38
 
39
- spec = Gem::Specification.new 'build', '1'
40
- spec.summary = 'build'
41
- spec.authors = 'build'
42
- 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"]
43
43
  spec.date = Time.at 0
44
- spec.rubygems_version = Gem::Version.new '0'
44
+ spec.rubygems_version = Gem::Version.new "0"
45
45
 
46
- FileUtils.mkdir 'lib'
46
+ FileUtils.mkdir "lib"
47
47
 
48
- File.open 'lib/code.rb', 'w' do |io|
49
- io.write '# lib/code.rb'
48
+ File.open "lib/code.rb", "w" do |io|
49
+ io.write "# lib/code.rb"
50
50
  end
51
51
 
52
52
  package = Gem::Package.new spec.file_name
@@ -69,11 +69,11 @@ class TestGemPackage < Gem::Package::TarTestCase
69
69
 
70
70
  reader.each_entry do |entry|
71
71
  case entry.full_name
72
- when 'checksums.yaml.gz' then
72
+ when "checksums.yaml.gz" then
73
73
  Zlib::GzipReader.wrap entry do |io|
74
74
  checksums = io.read
75
75
  end
76
- when 'data.tar.gz' then
76
+ when "data.tar.gz" then
77
77
  tar = entry.read
78
78
  end
79
79
  end
@@ -88,13 +88,13 @@ class TestGemPackage < Gem::Package::TarTestCase
88
88
  metadata_sha512 = OpenSSL::Digest::SHA512.hexdigest s.string
89
89
 
90
90
  expected = {
91
- 'SHA512' => {
92
- 'metadata.gz' => metadata_sha512,
93
- 'data.tar.gz' => OpenSSL::Digest::SHA512.hexdigest(tar),
91
+ "SHA512" => {
92
+ "metadata.gz" => metadata_sha512,
93
+ "data.tar.gz" => OpenSSL::Digest::SHA512.hexdigest(tar),
94
94
  },
95
- 'SHA256' => {
96
- 'metadata.gz' => metadata_sha256,
97
- 'data.tar.gz' => OpenSSL::Digest::SHA256.hexdigest(tar),
95
+ "SHA256" => {
96
+ "metadata.gz" => metadata_sha256,
97
+ "data.tar.gz" => OpenSSL::Digest::SHA256.hexdigest(tar),
98
98
  },
99
99
  }
100
100
 
@@ -105,12 +105,12 @@ class TestGemPackage < Gem::Package::TarTestCase
105
105
  epoch = ENV["SOURCE_DATE_EPOCH"]
106
106
  ENV["SOURCE_DATE_EPOCH"] = "123456789"
107
107
 
108
- spec = Gem::Specification.new 'build', '1'
109
- spec.summary = 'build'
110
- spec.authors = 'build'
111
- 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"]
112
112
  spec.date = Time.at 0
113
- spec.rubygems_version = Gem::Version.new '0'
113
+ spec.rubygems_version = Gem::Version.new "0"
114
114
 
115
115
  package = Gem::Package.new spec.file_name
116
116
 
@@ -123,11 +123,11 @@ class TestGemPackage < Gem::Package::TarTestCase
123
123
  epoch = ENV["SOURCE_DATE_EPOCH"]
124
124
  ENV["SOURCE_DATE_EPOCH"] = nil
125
125
 
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'
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"
131
131
 
132
132
  package = Gem::Package.new spec.file_name
133
133
 
@@ -144,17 +144,17 @@ class TestGemPackage < Gem::Package::TarTestCase
144
144
  spec = Gem::Specification.new
145
145
  spec.files = %w[lib/code.rb lib/empty]
146
146
 
147
- FileUtils.mkdir_p 'lib/empty'
147
+ FileUtils.mkdir_p "lib/empty"
148
148
 
149
- File.open 'lib/code.rb', 'w' do |io|
150
- io.write '# lib/code.rb'
149
+ File.open "lib/code.rb", "w" do |io|
150
+ io.write "# lib/code.rb"
151
151
  end
152
152
 
153
- File.open 'lib/extra.rb', 'w' do |io|
154
- io.write '# lib/extra.rb'
153
+ File.open "lib/extra.rb", "w" do |io|
154
+ io.write "# lib/extra.rb"
155
155
  end
156
156
 
157
- package = Gem::Package.new 'bogus.gem'
157
+ package = Gem::Package.new "bogus.gem"
158
158
  package.spec = spec
159
159
 
160
160
  tar = util_tar do |tar_io|
@@ -178,16 +178,16 @@ class TestGemPackage < Gem::Package::TarTestCase
178
178
  spec = Gem::Specification.new
179
179
  spec.files = %w[lib/code.rb lib/code_sym.rb lib/code_sym2.rb]
180
180
 
181
- FileUtils.mkdir_p 'lib'
181
+ FileUtils.mkdir_p "lib"
182
182
 
183
- File.open 'lib/code.rb', 'w' do |io|
184
- io.write '# lib/code.rb'
183
+ File.open "lib/code.rb", "w" do |io|
184
+ io.write "# lib/code.rb"
185
185
  end
186
186
 
187
187
  # NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb
188
188
  begin
189
- File.symlink('code.rb', 'lib/code_sym.rb')
190
- 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")
191
191
  rescue Errno::EACCES => e
192
192
  if win_platform?
193
193
  pend "symlink - must be admin with no UAC on Windows"
@@ -196,7 +196,7 @@ class TestGemPackage < Gem::Package::TarTestCase
196
196
  end
197
197
  end
198
198
 
199
- package = Gem::Package.new 'bogus.gem'
199
+ package = Gem::Package.new "bogus.gem"
200
200
  package.spec = spec
201
201
 
202
202
  tar = util_tar do |tar_io|
@@ -218,20 +218,20 @@ class TestGemPackage < Gem::Package::TarTestCase
218
218
  end
219
219
 
220
220
  assert_equal %w[lib/code.rb], files
221
- assert_equal [{ 'lib/code_sym.rb' => '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
222
222
  end
223
223
 
224
224
  def test_build
225
- spec = Gem::Specification.new 'build', '1'
226
- spec.summary = 'build'
227
- spec.authors = 'build'
228
- 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"]
229
229
  spec.rubygems_version = :junk
230
230
 
231
- FileUtils.mkdir 'lib'
231
+ FileUtils.mkdir "lib"
232
232
 
233
- File.open 'lib/code.rb', 'w' do |io|
234
- io.write '# lib/code.rb'
233
+ File.open "lib/code.rb", "w" do |io|
234
+ io.write "# lib/code.rb"
235
235
  end
236
236
 
237
237
  package = Gem::Package.new spec.file_name
@@ -252,25 +252,25 @@ class TestGemPackage < Gem::Package::TarTestCase
252
252
  end
253
253
 
254
254
  def test_build_auto_signed
255
- pend 'openssl is missing' unless Gem::HAVE_OPENSSL
255
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
256
256
 
257
- FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
257
+ FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
258
258
 
259
- 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"
260
260
  Gem::Security.write PRIVATE_KEY, private_key_path
261
261
 
262
- 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"
263
263
  FileUtils.cp PUBLIC_CERT_PATH, public_cert_path
264
264
 
265
- spec = Gem::Specification.new 'build', '1'
266
- spec.summary = 'build'
267
- spec.authors = 'build'
268
- 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"]
269
269
 
270
- FileUtils.mkdir 'lib'
270
+ FileUtils.mkdir "lib"
271
271
 
272
- File.open 'lib/code.rb', 'w' do |io|
273
- io.write '# lib/code.rb'
272
+ File.open "lib/code.rb", "w" do |io|
273
+ io.write "# lib/code.rb"
274
274
  end
275
275
 
276
276
  package = Gem::Package.new spec.file_name
@@ -295,25 +295,25 @@ class TestGemPackage < Gem::Package::TarTestCase
295
295
  end
296
296
 
297
297
  def test_build_auto_signed_encrypted_key
298
- pend 'openssl is missing' unless Gem::HAVE_OPENSSL
298
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
299
299
 
300
- FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
300
+ FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
301
301
 
302
- 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"
303
303
  FileUtils.cp ENCRYPTED_PRIVATE_KEY_PATH, private_key_path
304
304
 
305
- 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"
306
306
  Gem::Security.write PUBLIC_CERT, public_cert_path
307
307
 
308
- spec = Gem::Specification.new 'build', '1'
309
- spec.summary = 'build'
310
- spec.authors = 'build'
311
- 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"]
312
312
 
313
- FileUtils.mkdir 'lib'
313
+ FileUtils.mkdir "lib"
314
314
 
315
- File.open 'lib/code.rb', 'w' do |io|
316
- io.write '# lib/code.rb'
315
+ File.open "lib/code.rb", "w" do |io|
316
+ io.write "# lib/code.rb"
317
317
  end
318
318
 
319
319
  package = Gem::Package.new spec.file_name
@@ -338,7 +338,7 @@ class TestGemPackage < Gem::Package::TarTestCase
338
338
  end
339
339
 
340
340
  def test_build_invalid
341
- spec = Gem::Specification.new 'build', '1'
341
+ spec = Gem::Specification.new "build", "1"
342
342
 
343
343
  package = Gem::Package.new spec.file_name
344
344
  package.spec = spec
@@ -347,11 +347,11 @@ class TestGemPackage < Gem::Package::TarTestCase
347
347
  package.build
348
348
  end
349
349
 
350
- assert_equal 'missing value for attribute summary', e.message
350
+ assert_equal "missing value for attribute summary", e.message
351
351
  end
352
352
 
353
353
  def test_build_invalid_arguments
354
- spec = Gem::Specification.new 'build', '1'
354
+ spec = Gem::Specification.new "build", "1"
355
355
 
356
356
  package = Gem::Package.new spec.file_name
357
357
  package.spec = spec
@@ -364,19 +364,19 @@ class TestGemPackage < Gem::Package::TarTestCase
364
364
  end
365
365
 
366
366
  def test_build_signed
367
- pend 'openssl is missing' unless Gem::HAVE_OPENSSL
367
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
368
368
 
369
- spec = Gem::Specification.new 'build', '1'
370
- spec.summary = 'build'
371
- spec.authors = 'build'
372
- 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"]
373
373
  spec.cert_chain = [PUBLIC_CERT.to_pem]
374
374
  spec.signing_key = PRIVATE_KEY
375
375
 
376
- FileUtils.mkdir 'lib'
376
+ FileUtils.mkdir "lib"
377
377
 
378
- File.open 'lib/code.rb', 'w' do |io|
379
- io.write '# lib/code.rb'
378
+ File.open "lib/code.rb", "w" do |io|
379
+ io.write "# lib/code.rb"
380
380
  end
381
381
 
382
382
  package = Gem::Package.new spec.file_name
@@ -401,19 +401,19 @@ class TestGemPackage < Gem::Package::TarTestCase
401
401
  end
402
402
 
403
403
  def test_build_signed_encrypted_key
404
- pend 'openssl is missing' unless Gem::HAVE_OPENSSL
404
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
405
405
 
406
- spec = Gem::Specification.new 'build', '1'
407
- spec.summary = 'build'
408
- spec.authors = 'build'
409
- 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"]
410
410
  spec.cert_chain = [PUBLIC_CERT.to_pem]
411
411
  spec.signing_key = ENCRYPTED_PRIVATE_KEY
412
412
 
413
- FileUtils.mkdir 'lib'
413
+ FileUtils.mkdir "lib"
414
414
 
415
- File.open 'lib/code.rb', 'w' do |io|
416
- io.write '# lib/code.rb'
415
+ File.open "lib/code.rb", "w" do |io|
416
+ io.write "# lib/code.rb"
417
417
  end
418
418
 
419
419
  package = Gem::Package.new spec.file_name
@@ -441,11 +441,11 @@ class TestGemPackage < Gem::Package::TarTestCase
441
441
  data_tgz = util_tar_gz {}
442
442
 
443
443
  gem = util_tar do |tar|
444
- tar.add_file 'data.tar.gz', 0644 do |io|
444
+ tar.add_file "data.tar.gz", 0644 do |io|
445
445
  io.write data_tgz.string
446
446
  end
447
447
 
448
- tar.add_file 'metadata.gz', 0644 do |io|
448
+ tar.add_file "metadata.gz", 0644 do |io|
449
449
  Zlib::GzipWriter.wrap io do |gzio|
450
450
  gzio.write @spec.to_yaml
451
451
  end
@@ -475,7 +475,7 @@ class TestGemPackage < Gem::Package::TarTestCase
475
475
 
476
476
  package.extract_files @destination
477
477
 
478
- extracted = File.join @destination, 'lib/code.rb'
478
+ extracted = File.join @destination, "lib/code.rb"
479
479
  assert_path_exist extracted
480
480
 
481
481
  mask = 0100666 & (~File.umask)
@@ -488,34 +488,49 @@ class TestGemPackage < Gem::Package::TarTestCase
488
488
  data_tgz = util_tar_gz {}
489
489
 
490
490
  gem = util_tar do |tar|
491
- tar.add_file 'data.tar.gz', 0644 do |io|
491
+ tar.add_file "data.tar.gz", 0644 do |io|
492
492
  io.write data_tgz.string
493
493
  end
494
494
 
495
- tar.add_file 'metadata.gz', 0644 do |io|
495
+ tar.add_file "metadata.gz", 0644 do |io|
496
496
  Zlib::GzipWriter.wrap io do |gzio|
497
497
  gzio.write @spec.to_yaml
498
498
  end
499
499
  end
500
500
  end
501
501
 
502
- File.open 'empty.gem', 'wb' do |io|
502
+ File.open "empty.gem", "wb" do |io|
503
503
  io.write gem.string
504
504
  end
505
505
 
506
- package = Gem::Package.new 'empty.gem'
506
+ package = Gem::Package.new "empty.gem"
507
507
 
508
508
  package.extract_files @destination
509
509
 
510
510
  assert_path_exist @destination
511
511
  end
512
512
 
513
+ def test_extract_file_permissions
514
+ pend "chmod not supported" if win_platform?
515
+
516
+ gem_with_long_permissions = File.expand_path("packages/Bluebie-legs-0.6.2.gem", __dir__)
517
+
518
+ package = Gem::Package.new gem_with_long_permissions
519
+
520
+ package.extract_files @destination
521
+
522
+ filepath = File.join @destination, "README.rdoc"
523
+ assert_path_exist filepath
524
+
525
+ assert_equal 0104444, File.stat(filepath).mode
526
+ end
527
+
513
528
  def test_extract_tar_gz_absolute
514
529
  package = Gem::Package.new @gem
515
530
 
516
531
  tgz_io = util_tar_gz do |tar|
517
- tar.add_file '/absolute.rb', 0644 do |io|
518
- io.write 'hi'
532
+ tar.add_file "/absolute.rb", 0644 do |io|
533
+ io.write "hi"
519
534
  end
520
535
  end
521
536
 
@@ -529,14 +544,15 @@ class TestGemPackage < Gem::Package::TarTestCase
529
544
 
530
545
  def test_extract_tar_gz_symlink_relative_path
531
546
  package = Gem::Package.new @gem
547
+ package.verify
532
548
 
533
549
  tgz_io = util_tar_gz do |tar|
534
- tar.add_file 'relative.rb', 0644 do |io|
535
- io.write 'hi'
550
+ tar.add_file "relative.rb", 0644 do |io|
551
+ io.write "hi"
536
552
  end
537
553
 
538
- tar.mkdir 'lib', 0755
539
- tar.add_symlink 'lib/foo.rb', '../relative.rb', 0644
554
+ tar.mkdir "lib", 0755
555
+ tar.add_symlink "lib/foo.rb", "../relative.rb", 0644
540
556
  end
541
557
 
542
558
  begin
@@ -549,29 +565,50 @@ class TestGemPackage < Gem::Package::TarTestCase
549
565
  end
550
566
  end
551
567
 
552
- extracted = File.join @destination, 'lib/foo.rb'
568
+ extracted = File.join @destination, "lib/foo.rb"
553
569
  assert_path_exist extracted
554
- assert_equal '../relative.rb',
570
+ assert_equal "../relative.rb",
555
571
  File.readlink(extracted)
556
- assert_equal 'hi',
572
+ assert_equal "hi",
557
573
  File.read(extracted)
558
574
  end
559
575
 
576
+ def test_extract_tar_gz_symlink_broken_relative_path
577
+ package = Gem::Package.new @gem
578
+ package.verify
579
+
580
+ tgz_io = util_tar_gz do |tar|
581
+ tar.mkdir "lib", 0755
582
+ tar.add_symlink "lib/foo.rb", "../broken.rb", 0644
583
+ end
584
+
585
+ ui = Gem::MockGemUi.new
586
+
587
+ use_ui ui do
588
+ package.extract_tar_gz tgz_io, @destination
589
+ end
590
+
591
+ assert_equal "WARNING: a-2 ships with a dangling symlink named lib/foo.rb pointing to missing ../broken.rb file. Ignoring\n", ui.error
592
+
593
+ extracted = File.join @destination, "lib/foo.rb"
594
+ assert_path_not_exist extracted
595
+ end
596
+
560
597
  def test_extract_symlink_parent
561
598
  package = Gem::Package.new @gem
562
599
 
563
600
  tgz_io = util_tar_gz do |tar|
564
- tar.mkdir 'lib', 0755
565
- tar.add_symlink 'lib/link', '../..', 0644
566
- tar.add_file 'lib/link/outside.txt', 0644 do |io|
567
- io.write 'hi'
601
+ tar.mkdir "lib", 0755
602
+ tar.add_symlink "lib/link", "../..", 0644
603
+ tar.add_file "lib/link/outside.txt", 0644 do |io|
604
+ io.write "hi"
568
605
  end
569
606
  end
570
607
 
571
608
  # Extract into a subdirectory of @destination; if this test fails it writes
572
609
  # a file outside destination_subdir, but we want the file to remain inside
573
610
  # @destination so it will be cleaned up.
574
- destination_subdir = File.join @destination, 'subdir'
611
+ destination_subdir = File.join @destination, "subdir"
575
612
  FileUtils.mkdir_p destination_subdir
576
613
 
577
614
  expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
@@ -595,18 +632,18 @@ class TestGemPackage < Gem::Package::TarTestCase
595
632
  # Extract into a subdirectory of @destination; if this test fails it writes
596
633
  # a file outside destination_subdir, but we want the file to remain inside
597
634
  # @destination so it will be cleaned up.
598
- destination_subdir = File.join @destination, 'subdir'
635
+ destination_subdir = File.join @destination, "subdir"
599
636
  FileUtils.mkdir_p destination_subdir
600
637
 
601
- destination_user_dir = File.join @destination, 'user'
602
- destination_user_subdir = File.join destination_user_dir, 'dir'
638
+ destination_user_dir = File.join @destination, "user"
639
+ destination_user_subdir = File.join destination_user_dir, "dir"
603
640
  FileUtils.mkdir_p destination_user_subdir
604
641
 
605
642
  pend "TMPDIR seems too long to add it as symlink into tar" if destination_user_dir.size > 90
606
643
 
607
644
  tgz_io = util_tar_gz do |tar|
608
- tar.add_symlink 'link', destination_user_dir, 16877
609
- tar.add_symlink 'link/dir', '.', 16877
645
+ tar.add_symlink "link", destination_user_dir, 16877
646
+ tar.add_symlink "link/dir", ".", 16877
610
647
  end
611
648
 
612
649
  expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
@@ -629,19 +666,19 @@ class TestGemPackage < Gem::Package::TarTestCase
629
666
  package = Gem::Package.new @gem
630
667
 
631
668
  tgz_io = util_tar_gz do |tar|
632
- tar.mkdir 'lib', 0755
633
- tar.add_file 'lib/foo.rb', 0644 do |io|
634
- io.write 'hi'
669
+ tar.mkdir "lib", 0755
670
+ tar.add_file "lib/foo.rb", 0644 do |io|
671
+ io.write "hi"
635
672
  end
636
- tar.mkdir 'lib/foo', 0755
673
+ tar.mkdir "lib/foo", 0755
637
674
  end
638
675
 
639
676
  package.extract_tar_gz tgz_io, @destination
640
677
 
641
- extracted = File.join @destination, 'lib/foo.rb'
678
+ extracted = File.join @destination, "lib/foo.rb"
642
679
  assert_path_exist extracted
643
680
 
644
- extracted = File.join @destination, 'lib/foo'
681
+ extracted = File.join @destination, "lib/foo"
645
682
  assert_path_exist extracted
646
683
  end
647
684
 
@@ -649,14 +686,14 @@ class TestGemPackage < Gem::Package::TarTestCase
649
686
  package = Gem::Package.new @gem
650
687
 
651
688
  tgz_io = util_tar_gz do |tar|
652
- tar.add_file './dot_slash.rb', 0644 do |io|
653
- io.write 'hi'
689
+ tar.add_file "./dot_slash.rb", 0644 do |io|
690
+ io.write "hi"
654
691
  end
655
692
  end
656
693
 
657
694
  package.extract_tar_gz tgz_io, @destination
658
695
 
659
- extracted = File.join @destination, 'dot_slash.rb'
696
+ extracted = File.join @destination, "dot_slash.rb"
660
697
  assert_path_exist extracted
661
698
  end
662
699
 
@@ -664,14 +701,14 @@ class TestGemPackage < Gem::Package::TarTestCase
664
701
  package = Gem::Package.new @gem
665
702
 
666
703
  tgz_io = util_tar_gz do |tar|
667
- tar.add_file '.dot_file.rb', 0644 do |io|
668
- io.write 'hi'
704
+ tar.add_file ".dot_file.rb", 0644 do |io|
705
+ io.write "hi"
669
706
  end
670
707
  end
671
708
 
672
709
  package.extract_tar_gz tgz_io, @destination
673
710
 
674
- extracted = File.join @destination, '.dot_file.rb'
711
+ extracted = File.join @destination, ".dot_file.rb"
675
712
  assert_path_exist extracted
676
713
  end
677
714
 
@@ -680,14 +717,14 @@ class TestGemPackage < Gem::Package::TarTestCase
680
717
  package = Gem::Package.new @gem
681
718
 
682
719
  tgz_io = util_tar_gz do |tar|
683
- tar.add_file 'foo/file.rb', 0644 do |io|
684
- io.write 'hi'
720
+ tar.add_file "foo/file.rb", 0644 do |io|
721
+ io.write "hi"
685
722
  end
686
723
  end
687
724
 
688
725
  package.extract_tar_gz tgz_io, @destination.upcase
689
726
 
690
- extracted = File.join @destination, 'foo/file.rb'
727
+ extracted = File.join @destination, "foo/file.rb"
691
728
  assert_path_exist extracted
692
729
  end
693
730
  end
@@ -695,20 +732,20 @@ class TestGemPackage < Gem::Package::TarTestCase
695
732
  def test_install_location
696
733
  package = Gem::Package.new @gem
697
734
 
698
- file = 'file.rb'.dup
699
- file.taint if RUBY_VERSION < '2.7'
735
+ file = "file.rb".dup
736
+ file.taint if RUBY_VERSION < "2.7"
700
737
 
701
738
  destination = package.install_location file, @destination
702
739
 
703
- assert_equal File.join(@destination, 'file.rb'), destination
704
- refute destination.tainted? if RUBY_VERSION < '2.7'
740
+ assert_equal File.join(@destination, "file.rb"), destination
741
+ refute destination.tainted? if RUBY_VERSION < "2.7"
705
742
  end
706
743
 
707
744
  def test_install_location_absolute
708
745
  package = Gem::Package.new @gem
709
746
 
710
747
  e = assert_raise Gem::Package::PathError do
711
- package.install_location '/absolute.rb', @destination
748
+ package.install_location "/absolute.rb", @destination
712
749
  end
713
750
 
714
751
  assert_equal("installing into parent path /absolute.rb of " +
@@ -718,36 +755,36 @@ class TestGemPackage < Gem::Package::TarTestCase
718
755
  def test_install_location_dots
719
756
  package = Gem::Package.new @gem
720
757
 
721
- file = 'file.rb'
758
+ file = "file.rb"
722
759
 
723
- destination = File.join @destination, 'foo', '..', 'bar'
760
+ destination = File.join @destination, "foo", "..", "bar"
724
761
 
725
- FileUtils.mkdir_p File.join @destination, 'foo'
762
+ FileUtils.mkdir_p File.join @destination, "foo"
726
763
  FileUtils.mkdir_p File.expand_path destination
727
764
 
728
765
  destination = package.install_location file, destination
729
766
 
730
767
  # this test only fails on ruby missing File.realpath
731
- assert_equal File.join(@destination, 'bar', 'file.rb'), destination
768
+ assert_equal File.join(@destination, "bar", "file.rb"), destination
732
769
  end
733
770
 
734
771
  def test_install_location_extra_slash
735
772
  package = Gem::Package.new @gem
736
773
 
737
- file = 'foo//file.rb'.dup
738
- file.taint if RUBY_VERSION < '2.7'
774
+ file = "foo//file.rb".dup
775
+ file.taint if RUBY_VERSION < "2.7"
739
776
 
740
777
  destination = package.install_location file, @destination
741
778
 
742
- assert_equal File.join(@destination, 'foo', 'file.rb'), destination
743
- refute destination.tainted? if RUBY_VERSION < '2.7'
779
+ assert_equal File.join(@destination, "foo", "file.rb"), destination
780
+ refute destination.tainted? if RUBY_VERSION < "2.7"
744
781
  end
745
782
 
746
783
  def test_install_location_relative
747
784
  package = Gem::Package.new @gem
748
785
 
749
786
  e = assert_raise Gem::Package::PathError do
750
- package.install_location '../relative.rb', @destination
787
+ package.install_location "../relative.rb", @destination
751
788
  end
752
789
 
753
790
  parent = File.expand_path File.join @destination, "../relative.rb"
@@ -773,9 +810,9 @@ class TestGemPackage < Gem::Package::TarTestCase
773
810
 
774
811
  def test_load_spec
775
812
  entry = StringIO.new Gem::Util.gzip @spec.to_yaml
776
- def entry.full_name() 'metadata.gz' end
813
+ def entry.full_name() "metadata.gz" end
777
814
 
778
- package = Gem::Package.new 'nonexistent.gem'
815
+ package = Gem::Package.new "nonexistent.gem"
779
816
 
780
817
  spec = package.load_spec entry
781
818
 
@@ -794,8 +831,8 @@ class TestGemPackage < Gem::Package::TarTestCase
794
831
 
795
832
  def test_verify_checksum_bad
796
833
  data_tgz = util_tar_gz do |tar|
797
- tar.add_file 'lib/code.rb', 0444 do |io|
798
- io.write '# lib/code.rb'
834
+ tar.add_file "lib/code.rb", 0444 do |io|
835
+ io.write "# lib/code.rb"
799
836
  end
800
837
  end
801
838
 
@@ -804,45 +841,45 @@ class TestGemPackage < Gem::Package::TarTestCase
804
841
  gem = util_tar do |tar|
805
842
  metadata_gz = Gem::Util.gzip @spec.to_yaml
806
843
 
807
- tar.add_file 'metadata.gz', 0444 do |io|
844
+ tar.add_file "metadata.gz", 0444 do |io|
808
845
  io.write metadata_gz
809
846
  end
810
847
 
811
- tar.add_file 'data.tar.gz', 0444 do |io|
848
+ tar.add_file "data.tar.gz", 0444 do |io|
812
849
  io.write data_tgz
813
850
  end
814
851
 
815
852
  bogus_checksums = {
816
- 'SHA1' => {
817
- 'data.tar.gz' => 'bogus',
818
- 'metadata.gz' => 'bogus',
853
+ "SHA1" => {
854
+ "data.tar.gz" => "bogus",
855
+ "metadata.gz" => "bogus",
819
856
  },
820
857
  }
821
- tar.add_file 'checksums.yaml.gz', 0444 do |io|
858
+ tar.add_file "checksums.yaml.gz", 0444 do |io|
822
859
  Zlib::GzipWriter.wrap io do |gz_io|
823
860
  gz_io.write Psych.dump bogus_checksums
824
861
  end
825
862
  end
826
863
  end
827
864
 
828
- File.open 'mismatch.gem', 'wb' do |io|
865
+ File.open "mismatch.gem", "wb" do |io|
829
866
  io.write gem.string
830
867
  end
831
868
 
832
- package = Gem::Package.new 'mismatch.gem'
869
+ package = Gem::Package.new "mismatch.gem"
833
870
 
834
871
  e = assert_raise Gem::Package::FormatError do
835
872
  package.verify
836
873
  end
837
874
 
838
- assert_equal 'SHA1 checksum mismatch for data.tar.gz in mismatch.gem',
875
+ assert_equal "SHA1 checksum mismatch for data.tar.gz in mismatch.gem",
839
876
  e.message
840
877
  end
841
878
 
842
879
  def test_verify_checksum_missing
843
880
  data_tgz = util_tar_gz do |tar|
844
- tar.add_file 'lib/code.rb', 0444 do |io|
845
- io.write '# lib/code.rb'
881
+ tar.add_file "lib/code.rb", 0444 do |io|
882
+ io.write "# lib/code.rb"
846
883
  end
847
884
  end
848
885
 
@@ -851,7 +888,7 @@ class TestGemPackage < Gem::Package::TarTestCase
851
888
  gem = util_tar do |tar|
852
889
  metadata_gz = Gem::Util.gzip @spec.to_yaml
853
890
 
854
- tar.add_file 'metadata.gz', 0444 do |io|
891
+ tar.add_file "metadata.gz", 0444 do |io|
855
892
  io.write metadata_gz
856
893
  end
857
894
 
@@ -859,37 +896,37 @@ class TestGemPackage < Gem::Package::TarTestCase
859
896
  digest << metadata_gz
860
897
 
861
898
  checksums = {
862
- 'SHA1' => {
863
- 'metadata.gz' => digest.hexdigest,
899
+ "SHA1" => {
900
+ "metadata.gz" => digest.hexdigest,
864
901
  },
865
902
  }
866
903
 
867
- tar.add_file 'checksums.yaml.gz', 0444 do |io|
904
+ tar.add_file "checksums.yaml.gz", 0444 do |io|
868
905
  Zlib::GzipWriter.wrap io do |gz_io|
869
906
  gz_io.write Psych.dump checksums
870
907
  end
871
908
  end
872
909
 
873
- tar.add_file 'data.tar.gz', 0444 do |io|
910
+ tar.add_file "data.tar.gz", 0444 do |io|
874
911
  io.write data_tgz
875
912
  end
876
913
  end
877
914
 
878
- File.open 'data_checksum_missing.gem', 'wb' do |io|
915
+ File.open "data_checksum_missing.gem", "wb" do |io|
879
916
  io.write gem.string
880
917
  end
881
918
 
882
- package = Gem::Package.new 'data_checksum_missing.gem'
919
+ package = Gem::Package.new "data_checksum_missing.gem"
883
920
 
884
921
  assert package.verify
885
922
  end
886
923
 
887
924
  def test_verify_corrupt
888
925
  pend "jruby strips the null byte and does not think it's corrupt" if Gem.java_platform?
889
- tf = Tempfile.open 'corrupt' do |io|
890
- data = Gem::Util.gzip 'a' * 10
926
+ tf = Tempfile.open "corrupt" do |io|
927
+ data = Gem::Util.gzip "a" * 10
891
928
  io.write \
892
- tar_file_header('metadata.gz', "\000x", 0644, data.length, Time.now)
929
+ tar_file_header("metadata.gz", "\000x", 0644, data.length, Time.now)
893
930
  io.write data
894
931
  io.rewind
895
932
 
@@ -907,19 +944,19 @@ class TestGemPackage < Gem::Package::TarTestCase
907
944
  end
908
945
 
909
946
  def test_verify_empty
910
- FileUtils.touch 'empty.gem'
947
+ FileUtils.touch "empty.gem"
911
948
 
912
- package = Gem::Package.new 'empty.gem'
949
+ package = Gem::Package.new "empty.gem"
913
950
 
914
951
  e = assert_raise Gem::Package::FormatError do
915
952
  package.verify
916
953
  end
917
954
 
918
- assert_equal 'package metadata is missing in empty.gem', e.message
955
+ assert_equal "package metadata is missing in empty.gem", e.message
919
956
  end
920
957
 
921
958
  def test_verify_nonexistent
922
- package = Gem::Package.new 'nonexistent.gem'
959
+ package = Gem::Package.new "nonexistent.gem"
923
960
 
924
961
  e = assert_raise Gem::Package::FormatError do
925
962
  package.verify
@@ -930,19 +967,19 @@ class TestGemPackage < Gem::Package::TarTestCase
930
967
  end
931
968
 
932
969
  def test_verify_duplicate_file
933
- FileUtils.mkdir_p 'lib'
934
- FileUtils.touch 'lib/code.rb'
970
+ FileUtils.mkdir_p "lib"
971
+ FileUtils.touch "lib/code.rb"
935
972
 
936
973
  build = Gem::Package.new @gem
937
974
  build.spec = @spec
938
975
  build.setup_signer
939
- File.open @gem, 'wb' do |gem_io|
976
+ File.open @gem, "wb" do |gem_io|
940
977
  Gem::Package::TarWriter.new gem_io do |gem|
941
978
  build.add_metadata gem
942
979
  build.add_contents gem
943
980
 
944
- gem.add_file_simple 'a.sig', 0444, 0
945
- gem.add_file_simple 'a.sig', 0444, 0
981
+ gem.add_file_simple "a.sig", 0444, 0
982
+ gem.add_file_simple "a.sig", 0444, 0
946
983
  end
947
984
  end
948
985
 
@@ -956,7 +993,7 @@ class TestGemPackage < Gem::Package::TarTestCase
956
993
  end
957
994
 
958
995
  def test_verify_security_policy
959
- pend 'openssl is missing' unless Gem::HAVE_OPENSSL
996
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
960
997
 
961
998
  package = Gem::Package.new @gem
962
999
  package.security_policy = Gem::Security::HighSecurity
@@ -965,21 +1002,21 @@ class TestGemPackage < Gem::Package::TarTestCase
965
1002
  package.verify
966
1003
  end
967
1004
 
968
- assert_equal 'unsigned gems are not allowed by the High Security policy',
1005
+ assert_equal "unsigned gems are not allowed by the High Security policy",
969
1006
  e.message
970
1007
 
971
- refute package.instance_variable_get(:@spec), '@spec must not be loaded'
972
- assert_empty package.instance_variable_get(:@files), '@files must empty'
1008
+ refute package.instance_variable_get(:@spec), "@spec must not be loaded"
1009
+ assert_empty package.instance_variable_get(:@files), "@files must empty"
973
1010
  end
974
1011
 
975
1012
  def test_verify_security_policy_low_security
976
- pend 'openssl is missing' unless Gem::HAVE_OPENSSL
1013
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
977
1014
 
978
1015
  @spec.cert_chain = [PUBLIC_CERT.to_pem]
979
1016
  @spec.signing_key = PRIVATE_KEY
980
1017
 
981
- FileUtils.mkdir_p 'lib'
982
- FileUtils.touch 'lib/code.rb'
1018
+ FileUtils.mkdir_p "lib"
1019
+ FileUtils.touch "lib/code.rb"
983
1020
 
984
1021
  build = Gem::Package.new @gem
985
1022
  build.spec = @spec
@@ -993,7 +1030,7 @@ class TestGemPackage < Gem::Package::TarTestCase
993
1030
  end
994
1031
 
995
1032
  def test_verify_security_policy_checksum_missing
996
- pend 'openssl is missing' unless Gem::HAVE_OPENSSL
1033
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
997
1034
 
998
1035
  @spec.cert_chain = [PUBLIC_CERT.to_pem]
999
1036
  @spec.signing_key = PRIVATE_KEY
@@ -1002,23 +1039,23 @@ class TestGemPackage < Gem::Package::TarTestCase
1002
1039
  build.spec = @spec
1003
1040
  build.setup_signer
1004
1041
 
1005
- FileUtils.mkdir 'lib'
1006
- FileUtils.touch 'lib/code.rb'
1042
+ FileUtils.mkdir "lib"
1043
+ FileUtils.touch "lib/code.rb"
1007
1044
 
1008
- File.open @gem, 'wb' do |gem_io|
1045
+ File.open @gem, "wb" do |gem_io|
1009
1046
  Gem::Package::TarWriter.new gem_io do |gem|
1010
1047
  build.add_metadata gem
1011
1048
  build.add_contents gem
1012
1049
 
1013
1050
  # write bogus data.tar.gz to foil signature
1014
- bogus_data = Gem::Util.gzip 'hello'
1051
+ bogus_data = Gem::Util.gzip "hello"
1015
1052
  fake_signer = Class.new do
1016
- def digest_name; 'SHA512'; end
1053
+ def digest_name; "SHA512"; end
1017
1054
  def digest_algorithm; OpenSSL::Digest(:SHA512).new; end
1018
- def key; 'key'; end
1019
- def sign(*); 'fake_sig'; end
1055
+ def key; "key"; end
1056
+ def sign(*); "fake_sig"; end
1020
1057
  end
1021
- gem.add_file_signed 'data2.tar.gz', 0444, fake_signer.new do |io|
1058
+ gem.add_file_signed "data2.tar.gz", 0444, fake_signer.new do |io|
1022
1059
  io.write bogus_data
1023
1060
  end
1024
1061
 
@@ -1035,24 +1072,24 @@ class TestGemPackage < Gem::Package::TarTestCase
1035
1072
  package.verify
1036
1073
  end
1037
1074
 
1038
- assert_equal 'invalid signature', e.message
1075
+ assert_equal "invalid signature", e.message
1039
1076
 
1040
- refute package.instance_variable_get(:@spec), '@spec must not be loaded'
1041
- assert_empty package.instance_variable_get(:@files), '@files must empty'
1077
+ refute package.instance_variable_get(:@spec), "@spec must not be loaded"
1078
+ assert_empty package.instance_variable_get(:@files), "@files must empty"
1042
1079
  end
1043
1080
 
1044
1081
  def test_verify_truncate
1045
- File.open 'bad.gem', 'wb' do |io|
1082
+ File.open "bad.gem", "wb" do |io|
1046
1083
  io.write File.read(@gem, 1024) # don't care about newlines
1047
1084
  end
1048
1085
 
1049
- package = Gem::Package.new 'bad.gem'
1086
+ package = Gem::Package.new "bad.gem"
1050
1087
 
1051
1088
  e = assert_raise Gem::Package::FormatError do
1052
1089
  package.verify
1053
1090
  end
1054
1091
 
1055
- assert_equal 'package content (data.tar.gz) is missing in bad.gem',
1092
+ assert_equal "package content (data.tar.gz) is missing in bad.gem",
1056
1093
  e.message
1057
1094
  end
1058
1095
 
@@ -1060,7 +1097,7 @@ class TestGemPackage < Gem::Package::TarTestCase
1060
1097
 
1061
1098
  def test_verify_entry
1062
1099
  entry = Object.new
1063
- def entry.full_name() raise ArgumentError, 'whatever' end
1100
+ def entry.full_name() raise ArgumentError, "whatever" end
1064
1101
 
1065
1102
  package = Gem::Package.new @gem
1066
1103
 
@@ -1150,29 +1187,4 @@ class TestGemPackage < Gem::Package::TarTestCase
1150
1187
 
1151
1188
  assert_equal %w[lib/code.rb], package.contents
1152
1189
  end
1153
-
1154
- def util_tar
1155
- tar_io = StringIO.new
1156
-
1157
- Gem::Package::TarWriter.new tar_io do |tar|
1158
- yield tar
1159
- end
1160
-
1161
- tar_io.rewind
1162
-
1163
- tar_io
1164
- end
1165
-
1166
- def util_tar_gz(&block)
1167
- tar_io = util_tar(&block)
1168
-
1169
- tgz_io = StringIO.new
1170
-
1171
- # can't wrap TarWriter because it seeks
1172
- Zlib::GzipWriter.wrap tgz_io do |io|
1173
- io.write tar_io.string
1174
- end
1175
-
1176
- StringIO.new tgz_io.string
1177
- end
1178
1190
  end