rubygems-update 3.4.21 → 3.5.0

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 (564) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +132 -2
  3. data/Manifest.txt +39 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +74 -0
  6. data/bundler/README.md +1 -2
  7. data/bundler/bundler.gemspec +4 -2
  8. data/bundler/exe/bundle +1 -10
  9. data/bundler/lib/bundler/build_metadata.rb +3 -3
  10. data/bundler/lib/bundler/capistrano.rb +1 -1
  11. data/bundler/lib/bundler/checksum.rb +245 -0
  12. data/bundler/lib/bundler/ci_detector.rb +75 -0
  13. data/bundler/lib/bundler/cli/add.rb +3 -3
  14. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  15. data/bundler/lib/bundler/cli/cache.rb +1 -1
  16. data/bundler/lib/bundler/cli/check.rb +1 -1
  17. data/bundler/lib/bundler/cli/common.rb +9 -1
  18. data/bundler/lib/bundler/cli/config.rb +8 -7
  19. data/bundler/lib/bundler/cli/console.rb +3 -2
  20. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  21. data/bundler/lib/bundler/cli/exec.rb +1 -1
  22. data/bundler/lib/bundler/cli/gem.rb +31 -23
  23. data/bundler/lib/bundler/cli/info.rb +2 -13
  24. data/bundler/lib/bundler/cli/install.rb +5 -4
  25. data/bundler/lib/bundler/cli/issue.rb +1 -1
  26. data/bundler/lib/bundler/cli/lock.rb +4 -4
  27. data/bundler/lib/bundler/cli/open.rb +1 -1
  28. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  29. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  30. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  31. data/bundler/lib/bundler/cli/show.rb +2 -2
  32. data/bundler/lib/bundler/cli/update.rb +5 -5
  33. data/bundler/lib/bundler/cli.rb +215 -263
  34. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  35. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  36. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  37. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  38. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  39. data/bundler/lib/bundler/constants.rb +1 -1
  40. data/bundler/lib/bundler/current_ruby.rb +5 -21
  41. data/bundler/lib/bundler/definition.rb +43 -16
  42. data/bundler/lib/bundler/dependency.rb +16 -12
  43. data/bundler/lib/bundler/digest.rb +2 -2
  44. data/bundler/lib/bundler/dsl.rb +43 -25
  45. data/bundler/lib/bundler/endpoint_specification.rb +6 -2
  46. data/bundler/lib/bundler/env.rb +1 -3
  47. data/bundler/lib/bundler/errors.rb +58 -0
  48. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  49. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  50. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  51. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  52. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  53. data/bundler/lib/bundler/fetcher.rb +28 -25
  54. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  55. data/bundler/lib/bundler/gem_helper.rb +1 -1
  56. data/bundler/lib/bundler/gem_helpers.rb +12 -2
  57. data/bundler/lib/bundler/graph.rb +9 -9
  58. data/bundler/lib/bundler/index.rb +1 -2
  59. data/bundler/lib/bundler/injector.rb +1 -1
  60. data/bundler/lib/bundler/inline.rb +3 -3
  61. data/bundler/lib/bundler/installer/gem_installer.rb +10 -10
  62. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  63. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  64. data/bundler/lib/bundler/installer.rb +9 -9
  65. data/bundler/lib/bundler/lazy_specification.rb +28 -17
  66. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  67. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  68. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  69. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  70. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  71. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  72. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  73. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  74. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  75. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  76. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  77. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  78. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  79. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  80. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  81. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  82. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  83. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  84. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  85. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  86. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  87. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  88. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  89. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  90. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  91. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  92. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  93. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  94. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  95. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  96. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  97. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  98. data/bundler/lib/bundler/man/bundle.1 +5 -44
  99. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  100. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  101. data/bundler/lib/bundler/match_metadata.rb +4 -0
  102. data/bundler/lib/bundler/match_platform.rb +1 -1
  103. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  104. data/bundler/lib/bundler/plugin/index.rb +8 -0
  105. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  106. data/bundler/lib/bundler/plugin.rb +12 -5
  107. data/bundler/lib/bundler/resolver/base.rb +1 -1
  108. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  109. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  110. data/bundler/lib/bundler/resolver.rb +16 -16
  111. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  112. data/bundler/lib/bundler/ruby_version.rb +1 -1
  113. data/bundler/lib/bundler/rubygems_ext.rb +27 -54
  114. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -58
  115. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  116. data/bundler/lib/bundler/runtime.rb +2 -2
  117. data/bundler/lib/bundler/self_manager.rb +23 -7
  118. data/bundler/lib/bundler/settings.rb +27 -7
  119. data/bundler/lib/bundler/setup.rb +4 -1
  120. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +22 -14
  122. data/bundler/lib/bundler/source/git.rb +4 -3
  123. data/bundler/lib/bundler/source/metadata.rb +16 -16
  124. data/bundler/lib/bundler/source/path.rb +7 -6
  125. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  126. data/bundler/lib/bundler/source.rb +2 -0
  127. data/bundler/lib/bundler/spec_set.rb +43 -12
  128. data/bundler/lib/bundler/stub_specification.rb +1 -0
  129. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  130. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  131. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  132. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  133. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  134. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  135. data/bundler/lib/bundler/ui/shell.rb +2 -2
  136. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  137. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  138. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  140. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  141. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  142. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +36 -36
  143. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  144. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  145. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  146. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +8 -10
  147. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
  148. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
  149. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  150. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  151. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
  152. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
  153. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  154. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  155. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  156. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  157. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +44 -6
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  161. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  162. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +26 -150
  163. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +4 -46
  164. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  165. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -45
  166. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  167. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  168. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  169. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  170. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  171. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  172. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  173. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  174. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  175. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  176. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  177. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  178. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  179. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  180. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  181. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  182. data/bundler/lib/bundler/version.rb +1 -1
  183. data/bundler/lib/bundler/vlad.rb +1 -1
  184. data/bundler/lib/bundler/yaml_serializer.rb +9 -4
  185. data/bundler/lib/bundler.rb +38 -35
  186. data/lib/rubygems/available_set.rb +4 -4
  187. data/lib/rubygems/basic_specification.rb +35 -37
  188. data/lib/rubygems/bundler_version_finder.rb +4 -4
  189. data/lib/rubygems/ci_detector.rb +75 -0
  190. data/lib/rubygems/command.rb +15 -17
  191. data/lib/rubygems/command_manager.rb +5 -4
  192. data/lib/rubygems/commands/build_command.rb +2 -2
  193. data/lib/rubygems/commands/cert_command.rb +2 -3
  194. data/lib/rubygems/commands/check_command.rb +4 -4
  195. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  196. data/lib/rubygems/commands/contents_command.rb +5 -5
  197. data/lib/rubygems/commands/dependency_command.rb +4 -5
  198. data/lib/rubygems/commands/environment_command.rb +3 -5
  199. data/lib/rubygems/commands/exec_command.rb +1 -1
  200. data/lib/rubygems/commands/fetch_command.rb +2 -2
  201. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  202. data/lib/rubygems/commands/help_command.rb +4 -4
  203. data/lib/rubygems/commands/info_command.rb +2 -2
  204. data/lib/rubygems/commands/install_command.rb +8 -16
  205. data/lib/rubygems/commands/list_command.rb +2 -2
  206. data/lib/rubygems/commands/lock_command.rb +1 -1
  207. data/lib/rubygems/commands/open_command.rb +1 -1
  208. data/lib/rubygems/commands/owner_command.rb +1 -1
  209. data/lib/rubygems/commands/pristine_command.rb +13 -15
  210. data/lib/rubygems/commands/push_command.rb +2 -2
  211. data/lib/rubygems/commands/query_command.rb +4 -5
  212. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  213. data/lib/rubygems/commands/search_command.rb +2 -2
  214. data/lib/rubygems/commands/setup_command.rb +33 -36
  215. data/lib/rubygems/commands/sources_command.rb +12 -12
  216. data/lib/rubygems/commands/specification_command.rb +10 -10
  217. data/lib/rubygems/commands/stale_command.rb +1 -1
  218. data/lib/rubygems/commands/uninstall_command.rb +13 -14
  219. data/lib/rubygems/commands/unpack_command.rb +7 -7
  220. data/lib/rubygems/commands/update_command.rb +11 -13
  221. data/lib/rubygems/commands/which_command.rb +1 -1
  222. data/lib/rubygems/commands/yank_command.rb +1 -1
  223. data/lib/rubygems/compatibility.rb +5 -6
  224. data/lib/rubygems/config_file.rb +7 -7
  225. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  226. data/lib/rubygems/core_ext/kernel_require.rb +20 -49
  227. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  228. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  229. data/lib/rubygems/defaults.rb +15 -3
  230. data/lib/rubygems/dependency.rb +12 -14
  231. data/lib/rubygems/dependency_installer.rb +30 -31
  232. data/lib/rubygems/dependency_list.rb +1 -1
  233. data/lib/rubygems/deprecate.rb +16 -15
  234. data/lib/rubygems/doctor.rb +6 -6
  235. data/lib/rubygems/errors.rb +2 -6
  236. data/lib/rubygems/exceptions.rb +2 -1
  237. data/lib/rubygems/ext/builder.rb +15 -10
  238. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  239. data/lib/rubygems/ext/ext_conf_builder.rb +2 -4
  240. data/lib/rubygems/ext/rake_builder.rb +1 -1
  241. data/lib/rubygems/gem_runner.rb +4 -4
  242. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  243. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  244. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  245. data/lib/rubygems/install_update_options.rb +18 -19
  246. data/lib/rubygems/installer.rb +66 -45
  247. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  248. data/lib/rubygems/local_remote_options.rb +8 -11
  249. data/lib/rubygems/name_tuple.rb +7 -9
  250. data/lib/rubygems/net/http.rb +3 -0
  251. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  252. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  253. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  254. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  255. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  256. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  257. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  258. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  259. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  260. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  261. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  262. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  263. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  264. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  265. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  266. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  267. data/lib/rubygems/package/digest_io.rb +1 -1
  268. data/lib/rubygems/package/old.rb +2 -2
  269. data/lib/rubygems/package/tar_header.rb +45 -39
  270. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  271. data/lib/rubygems/package/tar_reader.rb +14 -5
  272. data/lib/rubygems/package/tar_writer.rb +20 -18
  273. data/lib/rubygems/package.rb +28 -27
  274. data/lib/rubygems/package_task.rb +2 -2
  275. data/lib/rubygems/path_support.rb +10 -11
  276. data/lib/rubygems/platform.rb +65 -48
  277. data/lib/rubygems/query_utils.rb +7 -9
  278. data/lib/rubygems/remote_fetcher.rb +17 -17
  279. data/lib/rubygems/request/connection_pools.rb +3 -3
  280. data/lib/rubygems/request.rb +20 -17
  281. data/lib/rubygems/request_set/gem_dependency_api.rb +120 -123
  282. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  283. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  284. data/lib/rubygems/request_set/lockfile.rb +6 -11
  285. data/lib/rubygems/request_set.rb +5 -5
  286. data/lib/rubygems/requirement.rb +7 -7
  287. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  288. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  289. data/lib/rubygems/resolver/activation_request.rb +1 -3
  290. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  291. data/lib/rubygems/resolver/best_set.rb +1 -1
  292. data/lib/rubygems/resolver/composed_set.rb +1 -1
  293. data/lib/rubygems/resolver/conflict.rb +4 -12
  294. data/lib/rubygems/resolver/index_set.rb +4 -4
  295. data/lib/rubygems/resolver/index_specification.rb +2 -2
  296. data/lib/rubygems/resolver/installer_set.rb +5 -6
  297. data/lib/rubygems/resolver/lock_set.rb +1 -1
  298. data/lib/rubygems/resolver.rb +6 -13
  299. data/lib/rubygems/s3_uri_signer.rb +6 -6
  300. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  301. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  302. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  303. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  304. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  305. data/lib/rubygems/safe_marshal.rb +74 -0
  306. data/lib/rubygems/safe_yaml.rb +5 -28
  307. data/lib/rubygems/security/policies.rb +36 -38
  308. data/lib/rubygems/security/policy.rb +7 -11
  309. data/lib/rubygems/security/signer.rb +1 -1
  310. data/lib/rubygems/security/trust_dir.rb +4 -4
  311. data/lib/rubygems/security.rb +8 -22
  312. data/lib/rubygems/source/git.rb +1 -3
  313. data/lib/rubygems/source/installed.rb +0 -2
  314. data/lib/rubygems/source/local.rb +7 -9
  315. data/lib/rubygems/source/lock.rb +1 -3
  316. data/lib/rubygems/source/specific_file.rb +0 -1
  317. data/lib/rubygems/source/vendor.rb +0 -2
  318. data/lib/rubygems/source.rb +12 -12
  319. data/lib/rubygems/source_list.rb +5 -5
  320. data/lib/rubygems/spec_fetcher.rb +31 -31
  321. data/lib/rubygems/specification.rb +145 -150
  322. data/lib/rubygems/specification_policy.rb +61 -31
  323. data/lib/rubygems/stub_specification.rb +4 -5
  324. data/lib/rubygems/text.rb +1 -2
  325. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  326. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  327. data/lib/rubygems/timeout.rb +3 -0
  328. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  329. data/lib/rubygems/uninstaller.rb +9 -11
  330. data/lib/rubygems/update_suggestion.rb +5 -18
  331. data/lib/rubygems/uri_formatter.rb +1 -1
  332. data/lib/rubygems/user_interaction.rb +17 -23
  333. data/lib/rubygems/util/licenses.rb +113 -35
  334. data/lib/rubygems/util/list.rb +3 -1
  335. data/lib/rubygems/util.rb +2 -4
  336. data/lib/rubygems/validator.rb +6 -4
  337. data/lib/rubygems/version.rb +35 -29
  338. data/lib/rubygems/version_option.rb +2 -5
  339. data/lib/rubygems/yaml_serializer.rb +9 -4
  340. data/lib/rubygems.rb +42 -42
  341. data/rubygems-update.gemspec +4 -4
  342. data/setup.rb +2 -2
  343. metadata +43 -225
  344. data/lib/rubygems/indexer.rb +0 -428
  345. data/lib/rubygems/mock_gem_ui.rb +0 -86
  346. data/test/rubygems/alternate_cert.pem +0 -19
  347. data/test/rubygems/alternate_cert_32.pem +0 -19
  348. data/test/rubygems/alternate_key.pem +0 -27
  349. data/test/rubygems/bad_rake.rb +0 -3
  350. data/test/rubygems/bundler_test_gem.rb +0 -424
  351. data/test/rubygems/ca_cert.pem +0 -77
  352. data/test/rubygems/child_cert.pem +0 -19
  353. data/test/rubygems/child_cert_32.pem +0 -19
  354. data/test/rubygems/child_key.pem +0 -27
  355. data/test/rubygems/client.pem +0 -107
  356. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  357. data/test/rubygems/data/gem-private_key.pem +0 -27
  358. data/test/rubygems/data/gem-public_cert.pem +0 -20
  359. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  360. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  361. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  362. data/test/rubygems/encrypted_private_key.pem +0 -30
  363. data/test/rubygems/expired_cert.pem +0 -19
  364. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  365. data/test/rubygems/foo/discover.rb +0 -1
  366. data/test/rubygems/future_cert.pem +0 -19
  367. data/test/rubygems/future_cert_32.pem +0 -19
  368. data/test/rubygems/good_rake.rb +0 -3
  369. data/test/rubygems/grandchild_cert.pem +0 -19
  370. data/test/rubygems/grandchild_cert_32.pem +0 -19
  371. data/test/rubygems/grandchild_key.pem +0 -27
  372. data/test/rubygems/helper.rb +0 -1649
  373. data/test/rubygems/installer_test_case.rb +0 -248
  374. data/test/rubygems/invalid_client.pem +0 -49
  375. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  376. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  377. data/test/rubygems/invalid_key.pem +0 -27
  378. data/test/rubygems/invalid_signer_cert.pem +0 -19
  379. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  380. data/test/rubygems/invalidchild_cert.pem +0 -19
  381. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  382. data/test/rubygems/invalidchild_key.pem +0 -27
  383. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  384. data/test/rubygems/package/tar_test_case.rb +0 -175
  385. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  386. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  387. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  388. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  389. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  390. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  391. data/test/rubygems/private3072_key.pem +0 -40
  392. data/test/rubygems/private_ec_key.pem +0 -9
  393. data/test/rubygems/private_key.pem +0 -27
  394. data/test/rubygems/public3072_cert.pem +0 -25
  395. data/test/rubygems/public_cert.pem +0 -20
  396. data/test/rubygems/public_cert_32.pem +0 -19
  397. data/test/rubygems/public_key.pem +0 -9
  398. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  399. data/test/rubygems/rubygems_plugin.rb +0 -24
  400. data/test/rubygems/sff/discover.rb +0 -1
  401. data/test/rubygems/simple_gem.rb +0 -68
  402. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  403. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  404. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  405. data/test/rubygems/ssl_cert.pem +0 -80
  406. data/test/rubygems/ssl_key.pem +0 -27
  407. data/test/rubygems/test_bundled_ca.rb +0 -61
  408. data/test/rubygems/test_config.rb +0 -28
  409. data/test/rubygems/test_deprecate.rb +0 -158
  410. data/test/rubygems/test_exit.rb +0 -17
  411. data/test/rubygems/test_gem.rb +0 -1799
  412. data/test/rubygems/test_gem_available_set.rb +0 -130
  413. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  414. data/test/rubygems/test_gem_command.rb +0 -403
  415. data/test/rubygems/test_gem_command_manager.rb +0 -400
  416. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  417. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  418. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  419. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  420. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  421. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  422. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  423. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  424. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  425. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  426. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  427. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  428. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  429. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  430. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  431. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  432. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  433. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  434. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  435. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  436. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  437. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  438. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  439. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  440. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  441. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  442. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  443. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  444. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  445. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  446. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -522
  447. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  448. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  449. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  450. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  451. data/test/rubygems/test_gem_config_file.rb +0 -551
  452. data/test/rubygems/test_gem_dependency.rb +0 -398
  453. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  454. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  455. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  456. data/test/rubygems/test_gem_doctor.rb +0 -195
  457. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  458. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  459. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  460. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  461. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  462. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  463. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  464. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  465. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  466. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  467. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  468. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  469. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  470. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  471. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  472. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  473. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  474. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  475. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  476. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  477. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  478. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  479. data/test/rubygems/test_gem_indexer.rb +0 -381
  480. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  481. data/test/rubygems/test_gem_installer.rb +0 -2512
  482. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  483. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  484. data/test/rubygems/test_gem_package.rb +0 -1306
  485. data/test/rubygems/test_gem_package_old.rb +0 -91
  486. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  487. data/test/rubygems/test_gem_package_tar_reader.rb +0 -135
  488. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  489. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  490. data/test/rubygems/test_gem_package_task.rb +0 -118
  491. data/test/rubygems/test_gem_path_support.rb +0 -139
  492. data/test/rubygems/test_gem_platform.rb +0 -497
  493. data/test/rubygems/test_gem_rdoc.rb +0 -137
  494. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  495. data/test/rubygems/test_gem_request.rb +0 -547
  496. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  497. data/test/rubygems/test_gem_request_set.rb +0 -672
  498. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  499. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  500. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  501. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  502. data/test/rubygems/test_gem_requirement.rb +0 -505
  503. data/test/rubygems/test_gem_resolver.rb +0 -859
  504. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  505. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  506. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  507. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  508. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  509. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  510. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  511. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  512. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  513. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  514. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  515. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  516. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  517. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  518. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  519. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  520. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  521. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  522. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  523. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  524. data/test/rubygems/test_gem_security.rb +0 -341
  525. data/test/rubygems/test_gem_security_policy.rb +0 -535
  526. data/test/rubygems/test_gem_security_signer.rb +0 -218
  527. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  528. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  529. data/test/rubygems/test_gem_source.rb +0 -254
  530. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  531. data/test/rubygems/test_gem_source_git.rb +0 -310
  532. data/test/rubygems/test_gem_source_installed.rb +0 -35
  533. data/test/rubygems/test_gem_source_list.rb +0 -119
  534. data/test/rubygems/test_gem_source_local.rb +0 -107
  535. data/test/rubygems/test_gem_source_lock.rb +0 -113
  536. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  537. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  538. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  539. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  540. data/test/rubygems/test_gem_specification.rb +0 -3856
  541. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  542. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  543. data/test/rubygems/test_gem_text.rb +0 -103
  544. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  545. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  546. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  547. data/test/rubygems/test_gem_uri.rb +0 -41
  548. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  549. data/test/rubygems/test_gem_util.rb +0 -91
  550. data/test/rubygems/test_gem_validator.rb +0 -42
  551. data/test/rubygems/test_gem_version.rb +0 -305
  552. data/test/rubygems/test_gem_version_option.rb +0 -165
  553. data/test/rubygems/test_kernel.rb +0 -124
  554. data/test/rubygems/test_project_sanity.rb +0 -49
  555. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  556. data/test/rubygems/test_require.rb +0 -732
  557. data/test/rubygems/test_rubygems.rb +0 -76
  558. data/test/rubygems/test_webauthn_listener.rb +0 -143
  559. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  560. data/test/rubygems/test_webauthn_poller.rb +0 -124
  561. data/test/rubygems/utilities.rb +0 -436
  562. data/test/rubygems/wrong_key_cert.pem +0 -19
  563. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  564. data/test/test_changelog_generator.rb +0 -17
@@ -70,7 +70,7 @@ class Gem::Package::Old < Gem::Package
70
70
  file_data << line
71
71
  end
72
72
 
73
- file_data = file_data.strip.unpack("m")[0]
73
+ file_data = file_data.strip.unpack1("m")
74
74
  file_data = Zlib::Inflate.inflate file_data
75
75
 
76
76
  raise Gem::Package::FormatError, "#{full_name} in #{@gem} is corrupt" if
@@ -78,7 +78,7 @@ class Gem::Package::Old < Gem::Package
78
78
 
79
79
  FileUtils.rm_rf destination
80
80
 
81
- FileUtils.mkdir_p File.dirname(destination), :mode => dir_mode && 0o755
81
+ FileUtils.mkdir_p File.dirname(destination), mode: dir_mode && 0o755
82
82
 
83
83
  File.open destination, "wb", file_mode(entry["mode"]) do |out|
84
84
  out.write file_data
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- #--
3
+ # rubocop:disable Style/AsciiComments
4
+
4
5
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
5
6
  # See LICENSE.txt for additional licensing information.
6
- #++
7
+
8
+ # rubocop:enable Style/AsciiComments
7
9
 
8
10
  ##
9
11
  #--
@@ -100,32 +102,33 @@ class Gem::Package::TarHeader
100
102
 
101
103
  def self.from(stream)
102
104
  header = stream.read 512
103
- empty = (EMPTY_HEADER == header)
105
+ empty = (header == EMPTY_HEADER)
104
106
 
105
107
  fields = header.unpack UNPACK_FORMAT
106
108
 
107
- new :name => fields.shift,
108
- :mode => strict_oct(fields.shift),
109
- :uid => oct_or_256based(fields.shift),
110
- :gid => oct_or_256based(fields.shift),
111
- :size => strict_oct(fields.shift),
112
- :mtime => strict_oct(fields.shift),
113
- :checksum => strict_oct(fields.shift),
114
- :typeflag => fields.shift,
115
- :linkname => fields.shift,
116
- :magic => fields.shift,
117
- :version => strict_oct(fields.shift),
118
- :uname => fields.shift,
119
- :gname => fields.shift,
120
- :devmajor => strict_oct(fields.shift),
121
- :devminor => strict_oct(fields.shift),
122
- :prefix => fields.shift,
123
-
124
- :empty => empty
109
+ new name: fields.shift,
110
+ mode: strict_oct(fields.shift),
111
+ uid: oct_or_256based(fields.shift),
112
+ gid: oct_or_256based(fields.shift),
113
+ size: strict_oct(fields.shift),
114
+ mtime: strict_oct(fields.shift),
115
+ checksum: strict_oct(fields.shift),
116
+ typeflag: fields.shift,
117
+ linkname: fields.shift,
118
+ magic: fields.shift,
119
+ version: strict_oct(fields.shift),
120
+ uname: fields.shift,
121
+ gname: fields.shift,
122
+ devmajor: strict_oct(fields.shift),
123
+ devminor: strict_oct(fields.shift),
124
+ prefix: fields.shift,
125
+
126
+ empty: empty
125
127
  end
126
128
 
127
129
  def self.strict_oct(str)
128
- return str.strip.oct if str.strip =~ /\A[0-7]*\z/
130
+ str.strip!
131
+ return str.oct if /\A[0-7]*\z/.match?(str)
129
132
 
130
133
  raise ArgumentError, "#{str.inspect} is not an octal string"
131
134
  end
@@ -135,7 +138,8 @@ class Gem::Package::TarHeader
135
138
  # \ff flags a negative 256-based number
136
139
  # In case we have a match, parse it as a signed binary value
137
140
  # in big-endian order, except that the high-order bit is ignored.
138
- return str.unpack("N2").last if str =~ /\A[\x80\xff]/n
141
+
142
+ return str.unpack1("@4N") if /\A[\x80\xff]/n.match?(str)
139
143
  strict_oct(str)
140
144
  end
141
145
 
@@ -147,21 +151,23 @@ class Gem::Package::TarHeader
147
151
  raise ArgumentError, ":name, :size, :prefix and :mode required"
148
152
  end
149
153
 
150
- vals[:uid] ||= 0
151
- vals[:gid] ||= 0
152
- vals[:mtime] ||= 0
153
- vals[:checksum] ||= ""
154
- vals[:typeflag] = "0" if vals[:typeflag].nil? || vals[:typeflag].empty?
155
- vals[:magic] ||= "ustar"
156
- vals[:version] ||= "00"
157
- vals[:uname] ||= "wheel"
158
- vals[:gname] ||= "wheel"
159
- vals[:devmajor] ||= 0
160
- vals[:devminor] ||= 0
161
-
162
- FIELDS.each do |name|
163
- instance_variable_set "@#{name}", vals[name]
164
- end
154
+ @checksum = vals[:checksum] || ""
155
+ @devmajor = vals[:devmajor] || 0
156
+ @devminor = vals[:devminor] || 0
157
+ @gid = vals[:gid] || 0
158
+ @gname = vals[:gname] || "wheel"
159
+ @linkname = vals[:linkname]
160
+ @magic = vals[:magic] || "ustar"
161
+ @mode = vals[:mode]
162
+ @mtime = vals[:mtime] || 0
163
+ @name = vals[:name]
164
+ @prefix = vals[:prefix]
165
+ @size = vals[:size]
166
+ @typeflag = vals[:typeflag]
167
+ @typeflag = "0" if @typeflag.nil? || @typeflag.empty?
168
+ @uid = vals[:uid] || 0
169
+ @uname = vals[:uname] || "wheel"
170
+ @version = vals[:version] || "00"
165
171
 
166
172
  @empty = vals[:empty]
167
173
  end
@@ -239,6 +245,6 @@ class Gem::Package::TarHeader
239
245
  end
240
246
 
241
247
  def oct(num, len)
242
- "%0#{len}o" % num
248
+ format("%0#{len}o", num)
243
249
  end
244
250
  end
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- #++
3
+ # rubocop:disable Style/AsciiComments
4
+
4
5
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
5
6
  # See LICENSE.txt for additional licensing information.
6
- #--
7
+
8
+ # rubocop:enable Style/AsciiComments
7
9
 
8
10
  ##
9
11
  # Class for reading entries out of a tar file
@@ -143,14 +145,13 @@ class Gem::Package::TarReader::Entry
143
145
 
144
146
  def pos=(new_pos)
145
147
  seek(new_pos, IO::SEEK_SET)
146
- new_pos
147
148
  end
148
149
 
149
150
  def size
150
151
  @header.size
151
152
  end
152
153
 
153
- alias length size
154
+ alias_method :length, :size
154
155
 
155
156
  ##
156
157
  # Reads +maxlen+ bytes from the tar file entry, or the rest of the entry if nil
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- #--
3
+ # rubocop:disable Style/AsciiComments
4
+
4
5
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
5
6
  # See LICENSE.txt for additional licensing information.
6
- #++
7
+
8
+ # rubocop:enable Style/AsciiComments
7
9
 
8
10
  ##
9
11
  # TarReader reads tar files and allows iteration over their items
@@ -50,7 +52,14 @@ class Gem::Package::TarReader
50
52
  return enum_for __method__ unless block_given?
51
53
 
52
54
  until @io.eof? do
53
- header = Gem::Package::TarHeader.from @io
55
+ begin
56
+ header = Gem::Package::TarHeader.from @io
57
+ rescue ArgumentError => e
58
+ # Specialize only exceptions from Gem::Package::TarHeader.strict_oct
59
+ raise e unless e.message.match?(/ is not an octal string$/)
60
+ raise Gem::Package::TarInvalidError, e.message
61
+ end
62
+
54
63
  return if header.empty?
55
64
  entry = Gem::Package::TarReader::Entry.new header, @io
56
65
  yield entry
@@ -58,7 +67,7 @@ class Gem::Package::TarReader
58
67
  end
59
68
  end
60
69
 
61
- alias each_entry each
70
+ alias_method :each_entry, :each
62
71
 
63
72
  ##
64
73
  # NOTE: Do not call #rewind during #each
@@ -83,7 +92,7 @@ class Gem::Package::TarReader
83
92
 
84
93
  return unless found
85
94
 
86
- return yield found
95
+ yield found
87
96
  ensure
88
97
  rewind
89
98
  end
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- #--
3
+ # rubocop:disable Style/AsciiComments
4
+
4
5
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
5
6
  # See LICENSE.txt for additional licensing information.
6
- #++
7
+
8
+ # rubocop:enable Style/AsciiComments
7
9
 
8
10
  ##
9
11
  # Allows writing of tar files
@@ -114,9 +116,9 @@ class Gem::Package::TarWriter
114
116
  final_pos = @io.pos
115
117
  @io.pos = init_pos
116
118
 
117
- header = Gem::Package::TarHeader.new :name => name, :mode => mode,
118
- :size => size, :prefix => prefix,
119
- :mtime => Gem.source_date_epoch
119
+ header = Gem::Package::TarHeader.new name: name, mode: mode,
120
+ size: size, prefix: prefix,
121
+ mtime: Gem.source_date_epoch
120
122
 
121
123
  @io.write header
122
124
  @io.pos = final_pos
@@ -207,9 +209,9 @@ class Gem::Package::TarWriter
207
209
 
208
210
  name, prefix = split_name name
209
211
 
210
- header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
211
- :size => size, :prefix => prefix,
212
- :mtime => Gem.source_date_epoch).to_s
212
+ header = Gem::Package::TarHeader.new(name: name, mode: mode,
213
+ size: size, prefix: prefix,
214
+ mtime: Gem.source_date_epoch).to_s
213
215
 
214
216
  @io.write header
215
217
  os = BoundedStream.new @io, size
@@ -233,11 +235,11 @@ class Gem::Package::TarWriter
233
235
 
234
236
  name, prefix = split_name name
235
237
 
236
- header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
237
- :size => 0, :typeflag => "2",
238
- :linkname => target,
239
- :prefix => prefix,
240
- :mtime => Gem.source_date_epoch).to_s
238
+ header = Gem::Package::TarHeader.new(name: name, mode: mode,
239
+ size: 0, typeflag: "2",
240
+ linkname: target,
241
+ prefix: prefix,
242
+ mtime: Gem.source_date_epoch).to_s
241
243
 
242
244
  @io.write header
243
245
 
@@ -287,10 +289,10 @@ class Gem::Package::TarWriter
287
289
 
288
290
  name, prefix = split_name(name)
289
291
 
290
- header = Gem::Package::TarHeader.new :name => name, :mode => mode,
291
- :typeflag => "5", :size => 0,
292
- :prefix => prefix,
293
- :mtime => Gem.source_date_epoch
292
+ header = Gem::Package::TarHeader.new name: name, mode: mode,
293
+ typeflag: "5", size: 0,
294
+ prefix: prefix,
295
+ mtime: Gem.source_date_epoch
294
296
 
295
297
  @io.write header
296
298
 
@@ -324,6 +326,6 @@ class Gem::Package::TarWriter
324
326
  end
325
327
  end
326
328
 
327
- return name, prefix
329
+ [name, prefix]
328
330
  end
329
331
  end
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- #--
3
+ # rubocop:disable Style/AsciiComments
4
+
4
5
  # Copyright (C) 2004 Mauricio Julio Fernández Pradier
5
6
  # See LICENSE.txt for additional licensing information.
6
- #++
7
+
8
+ # rubocop:enable Style/AsciiComments
7
9
 
8
10
  require_relative "../rubygems"
9
11
  require_relative "security"
@@ -59,7 +61,7 @@ class Gem::Package
59
61
  if source
60
62
  @path = source.path
61
63
 
62
- message = message + " in #{path}" if path
64
+ message += " in #{path}" if path
63
65
  end
64
66
 
65
67
  super message
@@ -68,15 +70,13 @@ class Gem::Package
68
70
 
69
71
  class PathError < Error
70
72
  def initialize(destination, destination_dir)
71
- super "installing into parent path %s of %s is not allowed" %
72
- [destination, destination_dir]
73
+ super format("installing into parent path %s of %s is not allowed", destination, destination_dir)
73
74
  end
74
75
  end
75
76
 
76
77
  class SymlinkError < Error
77
78
  def initialize(name, destination, destination_dir)
78
- super "installing symlink '%s' pointing to parent path %s of %s is not allowed" %
79
- [name, destination, destination_dir]
79
+ super format("installing symlink '%s' pointing to parent path %s of %s is not allowed", name, destination, destination_dir)
80
80
  end
81
81
  end
82
82
 
@@ -155,7 +155,7 @@ class Gem::Package
155
155
  Gem::Package::FileSource.new gem
156
156
  end
157
157
 
158
- return super unless Gem::Package == self
158
+ return super unless self == Gem::Package
159
159
  return super unless gem.present?
160
160
 
161
161
  return super unless gem.start
@@ -187,7 +187,7 @@ class Gem::Package
187
187
  end
188
188
  end
189
189
 
190
- return spec, metadata
190
+ [spec, metadata]
191
191
  end
192
192
 
193
193
  ##
@@ -357,18 +357,21 @@ EOM
357
357
 
358
358
  def digest(entry) # :nodoc:
359
359
  algorithms = if @checksums
360
- @checksums.keys
361
- else
362
- [Gem::Security::DIGEST_NAME].compact
360
+ @checksums.to_h {|algorithm, _| [algorithm, Gem::Security.create_digest(algorithm)] }
361
+ elsif Gem::Security::DIGEST_NAME
362
+ { Gem::Security::DIGEST_NAME => Gem::Security.create_digest(Gem::Security::DIGEST_NAME) }
363
363
  end
364
364
 
365
- algorithms.each do |algorithm|
366
- digester = Gem::Security.create_digest(algorithm)
365
+ return @digests if algorithms.nil? || algorithms.empty?
367
366
 
368
- digester << entry.readpartial(16_384) until entry.eof?
369
-
370
- entry.rewind
367
+ buf = String.new(capacity: 16_384, encoding: Encoding::BINARY)
368
+ until entry.eof?
369
+ entry.readpartial(16_384, buf)
370
+ algorithms.each_value {|digester| digester << buf }
371
+ end
372
+ entry.rewind
371
373
 
374
+ algorithms.each do |algorithm, digester|
372
375
  @digests[algorithm][entry.full_name] = digester
373
376
  end
374
377
 
@@ -384,7 +387,7 @@ EOM
384
387
  def extract_files(destination_dir, pattern = "*")
385
388
  verify unless @spec
386
389
 
387
- FileUtils.mkdir_p destination_dir, :mode => dir_mode && 0o755
390
+ FileUtils.mkdir_p destination_dir, mode: dir_mode && 0o755
388
391
 
389
392
  @gem.with_read_io do |io|
390
393
  reader = Gem::Package::TarReader.new io
@@ -394,7 +397,7 @@ EOM
394
397
 
395
398
  extract_tar_gz entry, destination_dir, pattern
396
399
 
397
- return # ignore further entries
400
+ break # ignore further entries
398
401
  end
399
402
  end
400
403
  rescue Zlib::GzipFile::Error, EOFError, Gem::Package::TarInvalidError => e
@@ -437,8 +440,6 @@ EOM
437
440
 
438
441
  FileUtils.rm_rf destination
439
442
 
440
- mkdir_options = {}
441
- mkdir_options[:mode] = dir_mode ? 0o755 : (entry.header.mode if entry.directory?)
442
443
  mkdir =
443
444
  if entry.directory?
444
445
  destination
@@ -447,7 +448,7 @@ EOM
447
448
  end
448
449
 
449
450
  unless directories.include?(mkdir)
450
- FileUtils.mkdir_p mkdir, **mkdir_options
451
+ FileUtils.mkdir_p mkdir, mode: dir_mode ? 0o755 : (entry.header.mode if entry.directory?)
451
452
  directories << mkdir
452
453
  end
453
454
 
@@ -512,7 +513,6 @@ EOM
512
513
  raise Gem::Package::PathError.new(destination, destination_dir) unless
513
514
  normalize_path(destination).start_with? normalize_path(destination_dir + "/")
514
515
 
515
- destination.tap(&Gem::UNTAINT)
516
516
  destination
517
517
  end
518
518
 
@@ -578,10 +578,10 @@ EOM
578
578
  )
579
579
 
580
580
  @spec.signing_key = nil
581
- @spec.cert_chain = @signer.cert_chain.map {|cert| cert.to_s }
581
+ @spec.cert_chain = @signer.cert_chain.map(&:to_s)
582
582
  else
583
583
  @signer = Gem::Security::Signer.new nil, nil, passphrase
584
- @spec.cert_chain = @signer.cert_chain.map {|cert| cert.to_pem } if
584
+ @spec.cert_chain = @signer.cert_chain.map(&:to_pem) if
585
585
  @signer.cert_chain
586
586
  end
587
587
  end
@@ -695,10 +695,10 @@ EOM
695
695
 
696
696
  unless @files.include? "data.tar.gz"
697
697
  raise Gem::Package::FormatError.new \
698
- "package content (data.tar.gz) is missing", @gem
698
+ "package content (data.tar.gz) is missing", @gem
699
699
  end
700
700
 
701
- if (duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)) && duplicates.any?
701
+ if (duplicates = @files.group_by {|f| f }.select {|_k,v| v.size > 1 }.map(&:first)) && duplicates.any?
702
702
  raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(", ")})"
703
703
  end
704
704
  end
@@ -708,6 +708,7 @@ EOM
708
708
 
709
709
  def verify_gz(entry) # :nodoc:
710
710
  Zlib::GzipReader.wrap entry do |gzio|
711
+ # TODO: read into a buffer once zlib supports it
711
712
  gzio.read 16_384 until gzio.eof? # gzip checksum verification
712
713
  end
713
714
  rescue Zlib::GzipFile::Error => e
@@ -97,13 +97,13 @@ class Gem::PackageTask < Rake::PackageTask
97
97
  gem_path = File.join package_dir, gem_file
98
98
  gem_dir = File.join package_dir, gem_spec.full_name
99
99
 
100
- task :package => [:gem]
100
+ task package: [:gem]
101
101
 
102
102
  directory package_dir
103
103
  directory gem_dir
104
104
 
105
105
  desc "Build the gem file #{gem_file}"
106
- task :gem => [gem_path]
106
+ task gem: [gem_path]
107
107
 
108
108
  trace = Rake.application.options.trace
109
109
  Gem.configuration.verbose = trace
@@ -24,23 +24,22 @@ class Gem::PathSupport
24
24
  # hashtable, or defaults to ENV, the system environment.
25
25
  #
26
26
  def initialize(env)
27
- @home = env["GEM_HOME"] || Gem.default_dir
28
-
29
- if File::ALT_SEPARATOR
30
- @home = @home.gsub(File::ALT_SEPARATOR, File::SEPARATOR)
31
- end
32
-
33
- @home = expand(@home)
34
-
27
+ @home = normalize_home_dir(env["GEM_HOME"] || Gem.default_dir)
35
28
  @path = split_gem_path env["GEM_PATH"], @home
36
29
 
37
30
  @spec_cache_dir = env["GEM_SPEC_CACHE"] || Gem.default_spec_cache_dir
38
-
39
- @spec_cache_dir = @spec_cache_dir.dup.tap(&Gem::UNTAINT)
40
31
  end
41
32
 
42
33
  private
43
34
 
35
+ def normalize_home_dir(home)
36
+ if File::ALT_SEPARATOR
37
+ home = home.gsub(File::ALT_SEPARATOR, File::SEPARATOR)
38
+ end
39
+
40
+ expand(home)
41
+ end
42
+
44
43
  ##
45
44
  # Split the Gem search path (as reported by Gem.path).
46
45
 
@@ -53,7 +52,7 @@ class Gem::PathSupport
53
52
  gem_path = gpaths.split(Gem.path_separator)
54
53
  # Handle the path_separator being set to a regexp, which will cause
55
54
  # end_with? to error
56
- if gpaths =~ /#{Gem.path_separator}\z/
55
+ if /#{Gem.path_separator}\z/.match?(gpaths)
57
56
  gem_path += default_path
58
57
  end
59
58