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,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #--
3
4
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
5
  # All rights reserved.
5
6
  # See LICENSE.txt for permissions.
6
7
  #++
7
8
 
8
- require_relative 'installer_uninstaller_utils'
9
- require_relative 'exceptions'
10
- require_relative 'deprecate'
11
- require_relative 'package'
12
- require_relative 'ext'
13
- require_relative 'user_interaction'
9
+ require_relative "installer_uninstaller_utils"
10
+ require_relative "exceptions"
11
+ require_relative "deprecate"
12
+ require_relative "package"
13
+ require_relative "ext"
14
+ require_relative "user_interaction"
14
15
 
15
16
  ##
16
17
  # The installer installs the files contained in the .gem into the Gem.home.
@@ -125,14 +126,14 @@ class Gem::Installer
125
126
  @spec = spec
126
127
  end
127
128
 
128
- def extract_files(destination_dir, pattern = '*')
129
+ def extract_files(destination_dir, pattern = "*")
129
130
  FileUtils.mkdir_p destination_dir
130
131
 
131
132
  spec.files.each do |file|
132
133
  file = File.join destination_dir, file
133
134
  next if File.exist? file
134
135
  FileUtils.mkdir_p File.dirname(file)
135
- File.open file, 'w' do |fp|
136
+ File.open file, "w" do |fp|
136
137
  fp.puts "# #{file}"
137
138
  end
138
139
  end
@@ -177,7 +178,7 @@ class Gem::Installer
177
178
  # :post_install_message:: Print gem post install message if true
178
179
 
179
180
  def initialize(package, options={})
180
- require 'fileutils'
181
+ require "fileutils"
181
182
 
182
183
  @options = options
183
184
  @package = package
@@ -219,7 +220,7 @@ class Gem::Installer
219
220
  ruby_executable = false
220
221
  existing = nil
221
222
 
222
- File.open generated_bin, 'rb' do |io|
223
+ File.open generated_bin, "rb" do |io|
223
224
  line = io.gets
224
225
  shebang = /^#!.*ruby/
225
226
 
@@ -234,8 +235,8 @@ class Gem::Installer
234
235
  io.gets # blankline
235
236
 
236
237
  # TODO detect a specially formatted comment instead of trying
237
- # to run a regexp against Ruby code.
238
- next unless io.gets =~ /This file was generated by RubyGems/
238
+ # to find a string inside Ruby code.
239
+ next unless io.gets.to_s.include?("This file was generated by RubyGems")
239
240
 
240
241
  ruby_executable = true
241
242
  existing = io.read.slice(%r{
@@ -251,12 +252,12 @@ class Gem::Installer
251
252
  return if spec.name == existing
252
253
 
253
254
  # somebody has written to RubyGems' directory, overwrite, too bad
254
- return if Gem.default_bindir != @bin_dir and not ruby_executable
255
+ return if Gem.default_bindir != @bin_dir && !ruby_executable
255
256
 
256
257
  question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
257
258
 
258
259
  if ruby_executable
259
- question << (existing || 'an unknown executable')
260
+ question << (existing || "an unknown executable")
260
261
 
261
262
  return if ask_yes_no "#{question}\nOverwrite the executable?", false
262
263
 
@@ -342,6 +343,8 @@ class Gem::Installer
342
343
 
343
344
  Gem::Specification.add_spec(spec)
344
345
 
346
+ load_plugin
347
+
345
348
  run_post_install_hooks
346
349
 
347
350
  spec
@@ -388,7 +391,7 @@ class Gem::Installer
388
391
  # we'll be installing into.
389
392
 
390
393
  def installed_specs
391
- @specs ||= begin
394
+ @installed_specs ||= begin
392
395
  specs = []
393
396
 
394
397
  Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
@@ -418,10 +421,10 @@ class Gem::Installer
418
421
  # True if the gems in the system satisfy +dependency+.
419
422
 
420
423
  def installation_satisfies_dependency?(dependency)
421
- return true if @options[:development] and dependency.type == :development
424
+ return true if @options[:development] && dependency.type == :development
422
425
  return true if installed_specs.detect {|s| dependency.matches_spec? s }
423
426
  return false if @only_install_dir
424
- not dependency.matching_specs.empty?
427
+ !dependency.matching_specs.empty?
425
428
  end
426
429
 
427
430
  ##
@@ -474,7 +477,7 @@ class Gem::Installer
474
477
  if Gem.win_platform?
475
478
  script_name = formatted_program_filename(filename) + ".bat"
476
479
  script_path = File.join bindir, File.basename(script_name)
477
- File.open script_path, 'w' do |file|
480
+ File.open script_path, "w" do |file|
478
481
  file.puts windows_stub_script(bindir, filename)
479
482
  end
480
483
 
@@ -483,28 +486,20 @@ class Gem::Installer
483
486
  end
484
487
 
485
488
  def generate_bin # :nodoc:
486
- return if spec.executables.nil? or spec.executables.empty?
489
+ return if spec.executables.nil? || spec.executables.empty?
487
490
 
488
491
  ensure_writable_dir @bin_dir
489
492
 
490
493
  spec.executables.each do |filename|
491
494
  filename.tap(&Gem::UNTAINT)
492
495
  bin_path = File.join gem_dir, spec.bindir, filename
493
-
494
- unless File.exist? bin_path
495
- if File.symlink? bin_path
496
- alert_warning "`#{bin_path}` is dangling symlink pointing to `#{File.readlink bin_path}`"
497
- else
498
- alert_warning "`#{bin_path}` does not exist, maybe `gem pristine #{spec.name}` will fix it?"
499
- end
500
- next
501
- end
496
+ next unless File.exist? bin_path
502
497
 
503
498
  mode = File.stat(bin_path).mode
504
499
  dir_mode = options[:prog_mode] || (mode | 0111)
505
500
 
506
501
  unless dir_mode == mode
507
- require 'fileutils'
502
+ require "fileutils"
508
503
  FileUtils.chmod dir_mode, bin_path
509
504
  end
510
505
 
@@ -541,10 +536,10 @@ class Gem::Installer
541
536
  def generate_bin_script(filename, bindir)
542
537
  bin_script_path = File.join bindir, formatted_program_filename(filename)
543
538
 
544
- require 'fileutils'
539
+ require "fileutils"
545
540
  FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
546
541
 
547
- File.open bin_script_path, 'wb', 0755 do |file|
542
+ File.open bin_script_path, "wb", 0755 do |file|
548
543
  file.print app_script_text(filename)
549
544
  file.chmod(options[:prog_mode] || 0755)
550
545
  end
@@ -565,7 +560,7 @@ class Gem::Installer
565
560
  if File.exist? dst
566
561
  if File.symlink? dst
567
562
  link = File.readlink(dst).split File::SEPARATOR
568
- cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ''))
563
+ cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ""))
569
564
  return if spec.version < cur_version
570
565
  end
571
566
  File.unlink dst
@@ -657,9 +652,9 @@ class Gem::Installer
657
652
 
658
653
  def process_options # :nodoc:
659
654
  @options = {
660
- :bin_dir => nil,
661
- :env_shebang => false,
662
- :force => false,
655
+ :bin_dir => nil,
656
+ :env_shebang => false,
657
+ :force => false,
663
658
  :only_install_dir => false,
664
659
  :post_install_message => true,
665
660
  }.merge options
@@ -684,9 +679,9 @@ class Gem::Installer
684
679
  @build_args = options[:build_args]
685
680
 
686
681
  unless @build_root.nil?
687
- @bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ''))
688
- @gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ''))
689
- @plugins_dir = File.join(@build_root, @plugins_dir.gsub(/^[a-zA-Z]:/, ''))
682
+ @bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ""))
683
+ @gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ""))
684
+ @plugins_dir = File.join(@build_root, @plugins_dir.gsub(/^[a-zA-Z]:/, ""))
690
685
  alert_warning "You build with buildroot.\n Build root: #{@build_root}\n Bin dir: #{@bin_dir}\n Gem home: #{@gem_home}\n Plugins dir: #{@plugins_dir}"
691
686
  end
692
687
  end
@@ -697,7 +692,7 @@ class Gem::Installer
697
692
  user_bin_dir = @bin_dir || Gem.bindir(gem_home)
698
693
  user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
699
694
 
700
- path = ENV['PATH']
695
+ path = ENV["PATH"]
701
696
  path = path.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
702
697
 
703
698
  if Gem.win_platform?
@@ -708,7 +703,7 @@ class Gem::Installer
708
703
  path = path.split(File::PATH_SEPARATOR)
709
704
 
710
705
  unless path.include? user_bin_dir
711
- unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV['HOME'], '~'))
706
+ unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV["HOME"], "~"))
712
707
  alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
713
708
  self.class.path_warning = true
714
709
  end
@@ -788,7 +783,7 @@ TEXT
788
783
  end
789
784
 
790
785
  def gemdeps_load(name)
791
- return '' if name == "bundler"
786
+ return "" if name == "bundler"
792
787
 
793
788
  <<-TEXT
794
789
 
@@ -824,7 +819,7 @@ TEXT
824
819
  TEXT
825
820
  elsif bindir.downcase.start_with? rb_topdir.downcase
826
821
  # stub within ruby folder, but not standard bin. Portable
827
- require 'pathname'
822
+ require "pathname"
828
823
  from = Pathname.new bindir
829
824
  to = Pathname.new "#{rb_topdir}/bin"
830
825
  rel = to.relative_path_from from
@@ -935,14 +930,14 @@ TEXT
935
930
  def write_build_info_file
936
931
  return if build_args.empty?
937
932
 
938
- build_info_dir = File.join gem_home, 'build_info'
933
+ build_info_dir = File.join gem_home, "build_info"
939
934
 
940
935
  dir_mode = options[:dir_mode]
941
936
  FileUtils.mkdir_p build_info_dir, :mode => dir_mode && 0755
942
937
 
943
938
  build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
944
939
 
945
- File.open build_info_file, 'w' do |io|
940
+ File.open build_info_file, "w" do |io|
946
941
  build_args.each do |arg|
947
942
  io.puts arg
948
943
  end
@@ -955,7 +950,7 @@ TEXT
955
950
  # Writes the .gem file to the cache directory
956
951
 
957
952
  def write_cache_file
958
- cache_file = File.join gem_home, 'cache', spec.file_name
953
+ cache_file = File.join gem_home, "cache", spec.file_name
959
954
  @package.copy_to cache_file
960
955
  end
961
956
 
@@ -987,7 +982,7 @@ TEXT
987
982
  end
988
983
 
989
984
  def load_relative_enabled?
990
- rb_config["LIBRUBY_RELATIVE"] == 'yes'
985
+ rb_config["LIBRUBY_RELATIVE"] == "yes"
991
986
  end
992
987
 
993
988
  def bash_prolog_script
@@ -1010,4 +1005,17 @@ TEXT
1010
1005
  ""
1011
1006
  end
1012
1007
  end
1008
+
1009
+ def load_plugin
1010
+ specs = Gem::Specification.find_all_by_name(spec.name)
1011
+ # If old version already exists, this plugin isn't loaded
1012
+ # immediately. It's for avoiding a case that multiple versions
1013
+ # are loaded at the same time.
1014
+ return unless specs.size == 1
1015
+
1016
+ plugin_files = spec.plugins.map do |plugin|
1017
+ File.join(@plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}")
1018
+ end
1019
+ Gem.load_plugin_files(plugin_files)
1020
+ end
1013
1021
  end
@@ -9,12 +9,12 @@ module Gem::InstallerUninstallerUtils
9
9
  plugins = spec.plugins
10
10
  return if plugins.empty?
11
11
 
12
- require 'pathname'
12
+ require "pathname"
13
13
 
14
14
  spec.plugins.each do |plugin|
15
15
  plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}"
16
16
 
17
- File.open plugin_script_path, 'wb' do |file|
17
+ File.open plugin_script_path, "wb" do |file|
18
18
  file.puts "require_relative '#{Pathname.new(plugin).relative_path_from(Pathname.new(plugins_dir))}'"
19
19
  end
20
20
 
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #--
3
4
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
5
  # All rights reserved.
5
6
  # See LICENSE.txt for permissions.
6
7
  #++
7
8
 
8
- require 'uri'
9
- require_relative '../rubygems'
9
+ require "uri"
10
+ require_relative "../rubygems"
10
11
 
11
12
  ##
12
13
  # Mixin methods for local and remote Gem::Command options.
@@ -38,18 +39,18 @@ module Gem::LocalRemoteOptions
38
39
  # Add local/remote options to the command line parser.
39
40
 
40
41
  def add_local_remote_options
41
- add_option(:"Local/Remote", '-l', '--local',
42
- 'Restrict operations to the LOCAL domain') do |value, options|
42
+ add_option(:"Local/Remote", "-l", "--local",
43
+ "Restrict operations to the LOCAL domain") do |value, options|
43
44
  options[:domain] = :local
44
45
  end
45
46
 
46
- add_option(:"Local/Remote", '-r', '--remote',
47
- 'Restrict operations to the REMOTE domain') do |value, options|
47
+ add_option(:"Local/Remote", "-r", "--remote",
48
+ "Restrict operations to the REMOTE domain") do |value, options|
48
49
  options[:domain] = :remote
49
50
  end
50
51
 
51
- add_option(:"Local/Remote", '-b', '--both',
52
- 'Allow LOCAL and REMOTE operations') do |value, options|
52
+ add_option(:"Local/Remote", "-b", "--both",
53
+ "Allow LOCAL and REMOTE operations") do |value, options|
53
54
  options[:domain] = :both
54
55
  end
55
56
 
@@ -64,7 +65,7 @@ module Gem::LocalRemoteOptions
64
65
  # Add the --bulk-threshold option
65
66
 
66
67
  def add_bulk_threshold_option
67
- add_option(:"Local/Remote", '-B', '--bulk-threshold COUNT',
68
+ add_option(:"Local/Remote", "-B", "--bulk-threshold COUNT",
68
69
  "Threshold for switching to bulk",
69
70
  "synchronization (default #{Gem.configuration.bulk_threshold})") do
70
71
  |value, options|
@@ -76,9 +77,8 @@ module Gem::LocalRemoteOptions
76
77
  # Add the --clear-sources option
77
78
 
78
79
  def add_clear_sources_option
79
- add_option(:"Local/Remote", '--clear-sources',
80
- 'Clear the gem sources') do |value, options|
81
-
80
+ add_option(:"Local/Remote", "--clear-sources",
81
+ "Clear the gem sources") do |value, options|
82
82
  Gem.sources = nil
83
83
  options[:sources_cleared] = true
84
84
  end
@@ -90,8 +90,8 @@ module Gem::LocalRemoteOptions
90
90
  def add_proxy_option
91
91
  accept_uri_http
92
92
 
93
- add_option(:"Local/Remote", '-p', '--[no-]http-proxy [URL]', URI::HTTP,
94
- 'Use HTTP proxy for remote operations') do |value, options|
93
+ add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", URI::HTTP,
94
+ "Use HTTP proxy for remote operations") do |value, options|
95
95
  options[:http_proxy] = (value == false) ? :no_proxy : value
96
96
  Gem.configuration[:http_proxy] = options[:http_proxy]
97
97
  end
@@ -103,10 +103,9 @@ module Gem::LocalRemoteOptions
103
103
  def add_source_option
104
104
  accept_uri_http
105
105
 
106
- add_option(:"Local/Remote", '-s', '--source URL', URI::HTTP,
107
- 'Append URL to list of remote gem sources') do |source, options|
108
-
109
- source << '/' if source !~ /\/\z/
106
+ add_option(:"Local/Remote", "-s", "--source URL", URI::HTTP,
107
+ "Append URL to list of remote gem sources") do |source, options|
108
+ source << "/" if source !~ /\/\z/
110
109
 
111
110
  if options.delete :sources_cleared
112
111
  Gem.sources = [source]
@@ -120,8 +119,8 @@ module Gem::LocalRemoteOptions
120
119
  # Add the --update-sources option
121
120
 
122
121
  def add_update_sources_option
123
- add_option(:Deprecated, '-u', '--[no-]update-sources',
124
- 'Update local source cache') do |value, options|
122
+ add_option(:Deprecated, "-u", "--[no-]update-sources",
123
+ "Update local source cache") do |value, options|
125
124
  Gem.configuration.update_sources = value
126
125
  end
127
126
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'user_interaction'
2
+
3
+ require_relative "user_interaction"
3
4
 
4
5
  ##
5
6
  # This Gem::StreamUI subclass records input and output to StringIO for
@@ -40,7 +41,7 @@ class Gem::MockGemUi < Gem::StreamUI
40
41
  end
41
42
 
42
43
  def initialize(input = "")
43
- require 'stringio'
44
+ require "stringio"
44
45
  ins = StringIO.new input
45
46
  outs = StringIO.new
46
47
  errs = StringIO.new
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  #
4
5
  # Represents a gem of name +name+ at +version+ of +platform+. These
@@ -10,7 +11,7 @@ class Gem::NameTuple
10
11
  @version = version
11
12
 
12
13
  unless platform.kind_of? Gem::Platform
13
- platform = "ruby" if !platform or platform.empty?
14
+ platform = "ruby" if !platform || platform.empty?
14
15
  end
15
16
 
16
17
  @platform = platform
@@ -48,7 +49,7 @@ class Gem::NameTuple
48
49
 
49
50
  def full_name
50
51
  case @platform
51
- when nil, 'ruby', ''
52
+ when nil, "ruby", ""
52
53
  "#{@name}-#{@version}"
53
54
  else
54
55
  "#{@name}-#{@version}-#{@platform}"
@@ -102,8 +103,8 @@ class Gem::NameTuple
102
103
  def ==(other)
103
104
  case other
104
105
  when self.class
105
- @name == other.name and
106
- @version == other.version and
106
+ @name == other.name &&
107
+ @version == other.version &&
107
108
  @platform == other.platform
108
109
  when Array
109
110
  to_a == other
@@ -425,7 +425,7 @@
425
425
  # If you have any questions, file a ticket at http://bugs.ruby-lang.org.
426
426
  #
427
427
  class Gem::OptionParser
428
- Gem::OptionParser::Version = "0.2.0"
428
+ Gem::OptionParser::Version = "0.3.0"
429
429
 
430
430
  # :stopdoc:
431
431
  NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
@@ -765,15 +765,15 @@ class Gem::OptionParser
765
765
  end
766
766
 
767
767
  #
768
- # Switch that takes an argument, which does not begin with '-'.
768
+ # Switch that takes an argument, which does not begin with '-' or is '-'.
769
769
  #
770
770
  class PlacedArgument < self
771
771
 
772
772
  #
773
- # Returns nil if argument is not present or begins with '-'.
773
+ # Returns nil if argument is not present or begins with '-' and is not '-'.
774
774
  #
775
775
  def parse(arg, argv, &error)
776
- if !(val = arg) and (argv.empty? or /\A-/ =~ (val = argv[0]))
776
+ if !(val = arg) and (argv.empty? or /\A-./ =~ (val = argv[0]))
777
777
  return nil, block, nil
778
778
  end
779
779
  opt = (val = parse_arg(val, &error))[1]
@@ -1148,6 +1148,7 @@ XXX
1148
1148
  @summary_indent = indent
1149
1149
  @default_argv = ARGV
1150
1150
  @require_exact = false
1151
+ @raise_unknown = true
1151
1152
  add_officious
1152
1153
  yield self if block_given?
1153
1154
  end
@@ -1225,6 +1226,9 @@ XXX
1225
1226
  # abbreviated long option as short option).
1226
1227
  attr_accessor :require_exact
1227
1228
 
1229
+ # Whether to raise at unknown option.
1230
+ attr_accessor :raise_unknown
1231
+
1228
1232
  #
1229
1233
  # Heading banner preceding summary.
1230
1234
  #
@@ -1502,7 +1506,7 @@ XXX
1502
1506
  style = notwice(default_style.guess(arg = o), style, 'style')
1503
1507
  default_pattern, conv = search(:atype, Object) unless default_pattern
1504
1508
  else
1505
- desc.push(o)
1509
+ desc.push(o) if o && !o.empty?
1506
1510
  end
1507
1511
  end
1508
1512
 
@@ -1639,9 +1643,11 @@ XXX
1639
1643
  begin
1640
1644
  sw, = complete(:long, opt, true)
1641
1645
  if require_exact && !sw.long.include?(arg)
1646
+ throw :terminate, arg unless raise_unknown
1642
1647
  raise InvalidOption, arg
1643
1648
  end
1644
1649
  rescue ParseError
1650
+ throw :terminate, arg unless raise_unknown
1645
1651
  raise $!.set_option(arg, true)
1646
1652
  end
1647
1653
  begin
@@ -1673,6 +1679,7 @@ XXX
1673
1679
  end
1674
1680
  end
1675
1681
  rescue ParseError
1682
+ throw :terminate, arg unless raise_unknown
1676
1683
  raise $!.set_option(arg, true)
1677
1684
  end
1678
1685
  begin
@@ -1862,12 +1869,7 @@ XXX
1862
1869
  end
1863
1870
  all_candidates.select! {|cand| cand.is_a?(String) }
1864
1871
  checker = DidYouMean::SpellChecker.new(dictionary: all_candidates)
1865
- suggestions = all_candidates & checker.correct(opt)
1866
- if DidYouMean.respond_to?(:formatter)
1867
- DidYouMean.formatter.message_for(suggestions)
1868
- else
1869
- "\nDid you mean? #{suggestions.join("\n ")}"
1870
- end
1872
+ DidYouMean.formatter.message_for(all_candidates & checker.correct(opt))
1871
1873
  end
1872
1874
 
1873
1875
  def candidate(word)
@@ -1908,10 +1910,13 @@ XXX
1908
1910
  # directory ~/.options, then the basename with '.options' suffix
1909
1911
  # under XDG and Haiku standard places.
1910
1912
  #
1911
- def load(filename = nil)
1913
+ # The optional +into+ keyword argument works exactly like that accepted in
1914
+ # method #parse.
1915
+ #
1916
+ def load(filename = nil, into: nil)
1912
1917
  unless filename
1913
1918
  basename = File.basename($0, '.*')
1914
- return true if load(File.expand_path(basename, '~/.options')) rescue nil
1919
+ return true if load(File.expand_path(basename, '~/.options'), into: into) rescue nil
1915
1920
  basename << ".options"
1916
1921
  return [
1917
1922
  # XDG
@@ -1923,11 +1928,11 @@ XXX
1923
1928
  '~/config/settings',
1924
1929
  ].any? {|dir|
1925
1930
  next if !dir or dir.empty?
1926
- load(File.expand_path(basename, dir)) rescue nil
1931
+ load(File.expand_path(basename, dir), into: into) rescue nil
1927
1932
  }
1928
1933
  end
1929
1934
  begin
1930
- parse(*IO.readlines(filename).each {|s| s.chomp!})
1935
+ parse(*File.readlines(filename, chomp: true), into: into)
1931
1936
  true
1932
1937
  rescue Errno::ENOENT, Errno::ENOTDIR
1933
1938
  false
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'optparse/lib/optparse'
3
+ require_relative "optparse/lib/optparse"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # IO wrapper that creates digests of contents written to the IO it wraps.
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # The primary source of gems is a file on disk, including all usages
4
5
  # internal to rubygems.
@@ -22,10 +23,10 @@ class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
22
23
  end
23
24
 
24
25
  def with_write_io(&block)
25
- File.open path, 'wb', &block
26
+ File.open path, "wb", &block
26
27
  end
27
28
 
28
29
  def with_read_io(&block)
29
- File.open path, 'rb', &block
30
+ File.open path, "rb", &block
30
31
  end
31
32
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # Supports reading and writing gems from/to a generic IO object. This is
4
5
  # useful for other applications built on top of rubygems, such as
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #--
3
4
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
5
  # All rights reserved.
@@ -19,8 +20,8 @@ class Gem::Package::Old < Gem::Package
19
20
  # cannot be written.
20
21
 
21
22
  def initialize(gem, security_policy)
22
- require 'fileutils'
23
- require 'zlib'
23
+ require "fileutils"
24
+ require "zlib"
24
25
  Gem.load_yaml
25
26
 
26
27
  @contents = nil
@@ -41,7 +42,7 @@ class Gem::Package::Old < Gem::Package
41
42
  read_until_dashes io # spec
42
43
  header = file_list io
43
44
 
44
- @contents = header.map {|file| file['path'] }
45
+ @contents = header.map {|file| file["path"] }
45
46
  end
46
47
  end
47
48
 
@@ -59,7 +60,7 @@ class Gem::Package::Old < Gem::Package
59
60
  raise Gem::Exception, errstr unless header
60
61
 
61
62
  header.each do |entry|
62
- full_name = entry['path']
63
+ full_name = entry["path"]
63
64
 
64
65
  destination = install_location full_name, destination_dir
65
66
 
@@ -73,13 +74,13 @@ class Gem::Package::Old < Gem::Package
73
74
  file_data = Zlib::Inflate.inflate file_data
74
75
 
75
76
  raise Gem::Package::FormatError, "#{full_name} in #{@gem} is corrupt" if
76
- file_data.length != entry['size'].to_i
77
+ file_data.length != entry["size"].to_i
77
78
 
78
79
  FileUtils.rm_rf destination
79
80
 
80
81
  FileUtils.mkdir_p File.dirname(destination), :mode => dir_mode && 0755
81
82
 
82
- File.open destination, 'wb', file_mode(entry['mode']) do |out|
83
+ File.open destination, "wb", file_mode(entry["mode"]) do |out|
83
84
  out.write file_data
84
85
  end
85
86
 
@@ -119,7 +120,7 @@ class Gem::Package::Old < Gem::Package
119
120
  loop do
120
121
  line = io.gets
121
122
 
122
- return if line.chomp == '__END__'
123
+ return if line.chomp == "__END__"
123
124
  break unless line
124
125
  end
125
126
 
@@ -160,7 +161,7 @@ class Gem::Package::Old < Gem::Package
160
161
  return true unless @security_policy
161
162
 
162
163
  raise Gem::Security::Exception,
163
- 'old format gems do not contain signatures and cannot be verified' if
164
+ "old format gems do not contain signatures and cannot be verified" if
164
165
  @security_policy.verify_data
165
166
 
166
167
  true
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Gem::Package::Source # :nodoc:
3
4
  end