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,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # A semi-compatible DSL for the Bundler Gemfile and Isolate gem dependencies
4
5
  # files.
@@ -32,134 +33,134 @@
32
33
 
33
34
  class Gem::RequestSet::GemDependencyAPI
34
35
  ENGINE_MAP = { # :nodoc:
35
- :jruby => %w[jruby],
36
- :jruby_18 => %w[jruby],
37
- :jruby_19 => %w[jruby],
38
- :maglev => %w[maglev],
39
- :mri => %w[ruby],
40
- :mri_18 => %w[ruby],
41
- :mri_19 => %w[ruby],
42
- :mri_20 => %w[ruby],
43
- :mri_21 => %w[ruby],
44
- :rbx => %w[rbx],
45
- :truffleruby => %w[truffleruby],
46
- :ruby => %w[ruby rbx maglev truffleruby],
47
- :ruby_18 => %w[ruby rbx maglev truffleruby],
48
- :ruby_19 => %w[ruby rbx maglev truffleruby],
49
- :ruby_20 => %w[ruby rbx maglev truffleruby],
50
- :ruby_21 => %w[ruby rbx maglev truffleruby],
36
+ :jruby => %w[jruby],
37
+ :jruby_18 => %w[jruby],
38
+ :jruby_19 => %w[jruby],
39
+ :maglev => %w[maglev],
40
+ :mri => %w[ruby],
41
+ :mri_18 => %w[ruby],
42
+ :mri_19 => %w[ruby],
43
+ :mri_20 => %w[ruby],
44
+ :mri_21 => %w[ruby],
45
+ :rbx => %w[rbx],
46
+ :truffleruby => %w[truffleruby],
47
+ :ruby => %w[ruby rbx maglev truffleruby],
48
+ :ruby_18 => %w[ruby rbx maglev truffleruby],
49
+ :ruby_19 => %w[ruby rbx maglev truffleruby],
50
+ :ruby_20 => %w[ruby rbx maglev truffleruby],
51
+ :ruby_21 => %w[ruby rbx maglev truffleruby],
51
52
  }.freeze
52
53
 
53
- mswin = Gem::Platform.new 'x86-mswin32'
54
- mswin64 = Gem::Platform.new 'x64-mswin64'
55
- x86_mingw = Gem::Platform.new 'x86-mingw32'
56
- x64_mingw = Gem::Platform.new 'x64-mingw32'
54
+ mswin = Gem::Platform.new "x86-mswin32"
55
+ mswin64 = Gem::Platform.new "x64-mswin64"
56
+ x86_mingw = Gem::Platform.new "x86-mingw32"
57
+ x64_mingw = Gem::Platform.new "x64-mingw32"
57
58
 
58
59
  PLATFORM_MAP = { # :nodoc:
59
- :jruby => Gem::Platform::RUBY,
60
- :jruby_18 => Gem::Platform::RUBY,
61
- :jruby_19 => Gem::Platform::RUBY,
62
- :maglev => Gem::Platform::RUBY,
63
- :mingw => x86_mingw,
64
- :mingw_18 => x86_mingw,
65
- :mingw_19 => x86_mingw,
66
- :mingw_20 => x86_mingw,
67
- :mingw_21 => x86_mingw,
68
- :mri => Gem::Platform::RUBY,
69
- :mri_18 => Gem::Platform::RUBY,
70
- :mri_19 => Gem::Platform::RUBY,
71
- :mri_20 => Gem::Platform::RUBY,
72
- :mri_21 => Gem::Platform::RUBY,
73
- :mswin => mswin,
74
- :mswin_18 => mswin,
75
- :mswin_19 => mswin,
76
- :mswin_20 => mswin,
77
- :mswin_21 => mswin,
78
- :mswin64 => mswin64,
79
- :mswin64_19 => mswin64,
80
- :mswin64_20 => mswin64,
81
- :mswin64_21 => mswin64,
82
- :rbx => Gem::Platform::RUBY,
83
- :ruby => Gem::Platform::RUBY,
84
- :ruby_18 => Gem::Platform::RUBY,
85
- :ruby_19 => Gem::Platform::RUBY,
86
- :ruby_20 => Gem::Platform::RUBY,
87
- :ruby_21 => Gem::Platform::RUBY,
88
- :truffleruby => Gem::Platform::RUBY,
89
- :x64_mingw => x64_mingw,
60
+ :jruby => Gem::Platform::RUBY,
61
+ :jruby_18 => Gem::Platform::RUBY,
62
+ :jruby_19 => Gem::Platform::RUBY,
63
+ :maglev => Gem::Platform::RUBY,
64
+ :mingw => x86_mingw,
65
+ :mingw_18 => x86_mingw,
66
+ :mingw_19 => x86_mingw,
67
+ :mingw_20 => x86_mingw,
68
+ :mingw_21 => x86_mingw,
69
+ :mri => Gem::Platform::RUBY,
70
+ :mri_18 => Gem::Platform::RUBY,
71
+ :mri_19 => Gem::Platform::RUBY,
72
+ :mri_20 => Gem::Platform::RUBY,
73
+ :mri_21 => Gem::Platform::RUBY,
74
+ :mswin => mswin,
75
+ :mswin_18 => mswin,
76
+ :mswin_19 => mswin,
77
+ :mswin_20 => mswin,
78
+ :mswin_21 => mswin,
79
+ :mswin64 => mswin64,
80
+ :mswin64_19 => mswin64,
81
+ :mswin64_20 => mswin64,
82
+ :mswin64_21 => mswin64,
83
+ :rbx => Gem::Platform::RUBY,
84
+ :ruby => Gem::Platform::RUBY,
85
+ :ruby_18 => Gem::Platform::RUBY,
86
+ :ruby_19 => Gem::Platform::RUBY,
87
+ :ruby_20 => Gem::Platform::RUBY,
88
+ :ruby_21 => Gem::Platform::RUBY,
89
+ :truffleruby => Gem::Platform::RUBY,
90
+ :x64_mingw => x64_mingw,
90
91
  :x64_mingw_20 => x64_mingw,
91
92
  :x64_mingw_21 => x64_mingw,
92
93
  }.freeze
93
94
 
94
- gt_eq_0 = Gem::Requirement.new '>= 0'
95
- tilde_gt_1_8_0 = Gem::Requirement.new '~> 1.8.0'
96
- tilde_gt_1_9_0 = Gem::Requirement.new '~> 1.9.0'
97
- tilde_gt_2_0_0 = Gem::Requirement.new '~> 2.0.0'
98
- tilde_gt_2_1_0 = Gem::Requirement.new '~> 2.1.0'
95
+ gt_eq_0 = Gem::Requirement.new ">= 0"
96
+ tilde_gt_1_8_0 = Gem::Requirement.new "~> 1.8.0"
97
+ tilde_gt_1_9_0 = Gem::Requirement.new "~> 1.9.0"
98
+ tilde_gt_2_0_0 = Gem::Requirement.new "~> 2.0.0"
99
+ tilde_gt_2_1_0 = Gem::Requirement.new "~> 2.1.0"
99
100
 
100
101
  VERSION_MAP = { # :nodoc:
101
- :jruby => gt_eq_0,
102
- :jruby_18 => tilde_gt_1_8_0,
103
- :jruby_19 => tilde_gt_1_9_0,
104
- :maglev => gt_eq_0,
105
- :mingw => gt_eq_0,
106
- :mingw_18 => tilde_gt_1_8_0,
107
- :mingw_19 => tilde_gt_1_9_0,
108
- :mingw_20 => tilde_gt_2_0_0,
109
- :mingw_21 => tilde_gt_2_1_0,
110
- :mri => gt_eq_0,
111
- :mri_18 => tilde_gt_1_8_0,
112
- :mri_19 => tilde_gt_1_9_0,
113
- :mri_20 => tilde_gt_2_0_0,
114
- :mri_21 => tilde_gt_2_1_0,
115
- :mswin => gt_eq_0,
116
- :mswin_18 => tilde_gt_1_8_0,
117
- :mswin_19 => tilde_gt_1_9_0,
118
- :mswin_20 => tilde_gt_2_0_0,
119
- :mswin_21 => tilde_gt_2_1_0,
120
- :mswin64 => gt_eq_0,
121
- :mswin64_19 => tilde_gt_1_9_0,
122
- :mswin64_20 => tilde_gt_2_0_0,
123
- :mswin64_21 => tilde_gt_2_1_0,
124
- :rbx => gt_eq_0,
125
- :ruby => gt_eq_0,
126
- :ruby_18 => tilde_gt_1_8_0,
127
- :ruby_19 => tilde_gt_1_9_0,
128
- :ruby_20 => tilde_gt_2_0_0,
129
- :ruby_21 => tilde_gt_2_1_0,
130
- :truffleruby => gt_eq_0,
131
- :x64_mingw => gt_eq_0,
102
+ :jruby => gt_eq_0,
103
+ :jruby_18 => tilde_gt_1_8_0,
104
+ :jruby_19 => tilde_gt_1_9_0,
105
+ :maglev => gt_eq_0,
106
+ :mingw => gt_eq_0,
107
+ :mingw_18 => tilde_gt_1_8_0,
108
+ :mingw_19 => tilde_gt_1_9_0,
109
+ :mingw_20 => tilde_gt_2_0_0,
110
+ :mingw_21 => tilde_gt_2_1_0,
111
+ :mri => gt_eq_0,
112
+ :mri_18 => tilde_gt_1_8_0,
113
+ :mri_19 => tilde_gt_1_9_0,
114
+ :mri_20 => tilde_gt_2_0_0,
115
+ :mri_21 => tilde_gt_2_1_0,
116
+ :mswin => gt_eq_0,
117
+ :mswin_18 => tilde_gt_1_8_0,
118
+ :mswin_19 => tilde_gt_1_9_0,
119
+ :mswin_20 => tilde_gt_2_0_0,
120
+ :mswin_21 => tilde_gt_2_1_0,
121
+ :mswin64 => gt_eq_0,
122
+ :mswin64_19 => tilde_gt_1_9_0,
123
+ :mswin64_20 => tilde_gt_2_0_0,
124
+ :mswin64_21 => tilde_gt_2_1_0,
125
+ :rbx => gt_eq_0,
126
+ :ruby => gt_eq_0,
127
+ :ruby_18 => tilde_gt_1_8_0,
128
+ :ruby_19 => tilde_gt_1_9_0,
129
+ :ruby_20 => tilde_gt_2_0_0,
130
+ :ruby_21 => tilde_gt_2_1_0,
131
+ :truffleruby => gt_eq_0,
132
+ :x64_mingw => gt_eq_0,
132
133
  :x64_mingw_20 => tilde_gt_2_0_0,
133
134
  :x64_mingw_21 => tilde_gt_2_1_0,
134
135
  }.freeze
135
136
 
136
137
  WINDOWS = { # :nodoc:
137
- :mingw => :only,
138
- :mingw_18 => :only,
139
- :mingw_19 => :only,
140
- :mingw_20 => :only,
141
- :mingw_21 => :only,
142
- :mri => :never,
143
- :mri_18 => :never,
144
- :mri_19 => :never,
145
- :mri_20 => :never,
146
- :mri_21 => :never,
147
- :mswin => :only,
148
- :mswin_18 => :only,
149
- :mswin_19 => :only,
150
- :mswin_20 => :only,
151
- :mswin_21 => :only,
152
- :mswin64 => :only,
153
- :mswin64_19 => :only,
154
- :mswin64_20 => :only,
155
- :mswin64_21 => :only,
156
- :rbx => :never,
157
- :ruby => :never,
158
- :ruby_18 => :never,
159
- :ruby_19 => :never,
160
- :ruby_20 => :never,
161
- :ruby_21 => :never,
162
- :x64_mingw => :only,
138
+ :mingw => :only,
139
+ :mingw_18 => :only,
140
+ :mingw_19 => :only,
141
+ :mingw_20 => :only,
142
+ :mingw_21 => :only,
143
+ :mri => :never,
144
+ :mri_18 => :never,
145
+ :mri_19 => :never,
146
+ :mri_20 => :never,
147
+ :mri_21 => :never,
148
+ :mswin => :only,
149
+ :mswin_18 => :only,
150
+ :mswin_19 => :only,
151
+ :mswin_20 => :only,
152
+ :mswin_21 => :only,
153
+ :mswin64 => :only,
154
+ :mswin64_19 => :only,
155
+ :mswin64_20 => :only,
156
+ :mswin64_21 => :only,
157
+ :rbx => :never,
158
+ :ruby => :never,
159
+ :ruby_18 => :never,
160
+ :ruby_19 => :never,
161
+ :ruby_20 => :never,
162
+ :ruby_21 => :never,
163
+ :x64_mingw => :only,
163
164
  :x64_mingw_20 => :only,
164
165
  :x64_mingw_21 => :only,
165
166
  }.freeze
@@ -214,7 +215,7 @@ class Gem::RequestSet::GemDependencyAPI
214
215
  git_source :github do |repo_name|
215
216
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include? "/"
216
217
 
217
- "git://github.com/#{repo_name}.git"
218
+ "https://github.com/#{repo_name}.git"
218
219
  end
219
220
 
220
221
  git_source :bitbucket do |repo_name|
@@ -371,7 +372,7 @@ class Gem::RequestSet::GemDependencyAPI
371
372
  duplicate = @dependencies.include? name
372
373
 
373
374
  @dependencies[name] =
374
- if requirements.empty? and not source_set
375
+ if requirements.empty? && !source_set
375
376
  Gem::Requirement.default
376
377
  elsif source_set
377
378
  Gem::Requirement.source_set
@@ -435,7 +436,6 @@ Gem dependencies file #{@path} requires #{name} more than once.
435
436
  reference ||= ref
436
437
  reference ||= branch
437
438
  reference ||= tag
438
- reference ||= 'master'
439
439
 
440
440
  if ref && branch
441
441
  warn <<-WARNING
@@ -637,8 +637,8 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
637
637
  # :development. Only one group may be specified.
638
638
 
639
639
  def gemspec(options = {})
640
- name = options.delete(:name) || '{,*}'
641
- path = options.delete(:path) || '.'
640
+ name = options.delete(:name) || "{,*}"
641
+ path = options.delete(:path) || "."
642
642
  development_group = options.delete(:development_group) || :development
643
643
 
644
644
  spec = find_gemspec name, path
@@ -697,11 +697,11 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
697
697
  def pin_gem_source(name, type = :default, source = nil)
698
698
  source_description =
699
699
  case type
700
- when :default then '(default)'
700
+ when :default then "(default)"
701
701
  when :path then "path: #{source}"
702
702
  when :git then "git: #{source}"
703
703
  when :source then "source: #{source}"
704
- else '(unknown)'
704
+ else "(unknown)"
705
705
  end
706
706
 
707
707
  raise ArgumentError,
@@ -788,8 +788,8 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
788
788
  engine_version = options[:engine_version]
789
789
 
790
790
  raise ArgumentError,
791
- 'You must specify engine_version along with the Ruby engine' if
792
- engine and not engine_version
791
+ "You must specify engine_version along with the Ruby engine" if
792
+ engine && !engine_version
793
793
 
794
794
  return true if @installing
795
795
 
@@ -800,7 +800,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
800
800
  raise Gem::RubyVersionMismatch, message
801
801
  end
802
802
 
803
- if engine and engine != Gem.ruby_engine
803
+ if engine && engine != Gem.ruby_engine
804
804
  message = "Your Ruby engine is #{Gem.ruby_engine}, " +
805
805
  "but your #{gem_deps_file} requires #{engine}"
806
806
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Gem::RequestSet::Lockfile::Parser
3
4
  ###
4
5
  # Parses lockfiles
@@ -19,18 +20,18 @@ class Gem::RequestSet::Lockfile::Parser
19
20
  @tokens.skip :newline
20
21
 
21
22
  case token.value
22
- when 'DEPENDENCIES' then
23
+ when "DEPENDENCIES" then
23
24
  parse_DEPENDENCIES
24
- when 'GIT' then
25
+ when "GIT" then
25
26
  parse_GIT
26
- when 'GEM' then
27
+ when "GEM" then
27
28
  parse_GEM
28
- when 'PATH' then
29
+ when "PATH" then
29
30
  parse_PATH
30
- when 'PLATFORMS' then
31
+ when "PLATFORMS" then
31
32
  parse_PLATFORMS
32
33
  else
33
- token = get until @tokens.empty? or peek.first == :section
34
+ token = get until @tokens.empty? || peek.first == :section
34
35
  end
35
36
  else
36
37
  raise "BUG: unhandled token #{token.type} (#{token.value.inspect}) at line #{token.line} column #{token.column}"
@@ -44,7 +45,7 @@ class Gem::RequestSet::Lockfile::Parser
44
45
  def get(expected_types = nil, expected_value = nil) # :nodoc:
45
46
  token = @tokens.shift
46
47
 
47
- if expected_types and not Array(expected_types).include? token.type
48
+ if expected_types && !Array(expected_types).include?(token.type)
48
49
  unget token
49
50
 
50
51
  message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
@@ -53,7 +54,7 @@ class Gem::RequestSet::Lockfile::Parser
53
54
  raise Gem::RequestSet::Lockfile::ParseError.new message, token.column, token.line, @filename
54
55
  end
55
56
 
56
- if expected_value and expected_value != token.value
57
+ if expected_value && expected_value != token.value
57
58
  unget token
58
59
 
59
60
  message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
@@ -67,7 +68,7 @@ class Gem::RequestSet::Lockfile::Parser
67
68
  end
68
69
 
69
70
  def parse_DEPENDENCIES # :nodoc:
70
- while not @tokens.empty? and :text == peek.type do
71
+ while !@tokens.empty? && :text == peek.type do
71
72
  token = get :text
72
73
 
73
74
  requirements = []
@@ -110,8 +111,8 @@ class Gem::RequestSet::Lockfile::Parser
110
111
  def parse_GEM # :nodoc:
111
112
  sources = []
112
113
 
113
- while [:entry, 'remote'] == peek.first(2) do
114
- get :entry, 'remote'
114
+ while [:entry, "remote"] == peek.first(2) do
115
+ get :entry, "remote"
115
116
  data = get(:text).value
116
117
  skip :newline
117
118
 
@@ -120,14 +121,14 @@ class Gem::RequestSet::Lockfile::Parser
120
121
 
121
122
  sources << Gem::Source.new(Gem::DEFAULT_HOST) if sources.empty?
122
123
 
123
- get :entry, 'specs'
124
+ get :entry, "specs"
124
125
 
125
126
  skip :newline
126
127
 
127
128
  set = Gem::Resolver::LockSet.new sources
128
129
  last_specs = nil
129
130
 
130
- while not @tokens.empty? and :text == peek.type do
131
+ while !@tokens.empty? && :text == peek.type do
131
132
  token = get :text
132
133
  name = token.value
133
134
  column = token.column
@@ -144,8 +145,8 @@ class Gem::RequestSet::Lockfile::Parser
144
145
  type = token.type
145
146
  data = token.value
146
147
 
147
- if type == :text and column == 4
148
- version, platform = data.split '-', 2
148
+ if type == :text && column == 4
149
+ version, platform = data.split "-", 2
149
150
 
150
151
  platform =
151
152
  platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
@@ -171,26 +172,26 @@ class Gem::RequestSet::Lockfile::Parser
171
172
  end
172
173
 
173
174
  def parse_GIT # :nodoc:
174
- get :entry, 'remote'
175
+ get :entry, "remote"
175
176
  repository = get(:text).value
176
177
 
177
178
  skip :newline
178
179
 
179
- get :entry, 'revision'
180
+ get :entry, "revision"
180
181
  revision = get(:text).value
181
182
 
182
183
  skip :newline
183
184
 
184
185
  type = peek.type
185
186
  value = peek.value
186
- if type == :entry and %w[branch ref tag].include? value
187
+ if type == :entry && %w[branch ref tag].include?(value)
187
188
  get
188
189
  get :text
189
190
 
190
191
  skip :newline
191
192
  end
192
193
 
193
- get :entry, 'specs'
194
+ get :entry, "specs"
194
195
 
195
196
  skip :newline
196
197
 
@@ -199,7 +200,7 @@ class Gem::RequestSet::Lockfile::Parser
199
200
 
200
201
  last_spec = nil
201
202
 
202
- while not @tokens.empty? and :text == peek.type do
203
+ while !@tokens.empty? && :text == peek.type do
203
204
  token = get :text
204
205
  name = token.value
205
206
  column = token.column
@@ -214,7 +215,7 @@ class Gem::RequestSet::Lockfile::Parser
214
215
  type = token.type
215
216
  data = token.value
216
217
 
217
- if type == :text and column == 4
218
+ if type == :text && column == 4
218
219
  last_spec = set.add_git_spec name, data, repository, revision, true
219
220
  else
220
221
  dependency = parse_dependency name, data
@@ -234,19 +235,19 @@ class Gem::RequestSet::Lockfile::Parser
234
235
  end
235
236
 
236
237
  def parse_PATH # :nodoc:
237
- get :entry, 'remote'
238
+ get :entry, "remote"
238
239
  directory = get(:text).value
239
240
 
240
241
  skip :newline
241
242
 
242
- get :entry, 'specs'
243
+ get :entry, "specs"
243
244
 
244
245
  skip :newline
245
246
 
246
247
  set = Gem::Resolver::VendorSet.new
247
248
  last_spec = nil
248
249
 
249
- while not @tokens.empty? and :text == peek.first do
250
+ while !@tokens.empty? && :text == peek.first do
250
251
  token = get :text
251
252
  name = token.value
252
253
  column = token.column
@@ -261,7 +262,7 @@ class Gem::RequestSet::Lockfile::Parser
261
262
  type = token.type
262
263
  data = token.value
263
264
 
264
- if type == :text and column == 4
265
+ if type == :text && column == 4
265
266
  last_spec = set.add_vendor_gem name, directory
266
267
  else
267
268
  dependency = parse_dependency name, data
@@ -281,7 +282,7 @@ class Gem::RequestSet::Lockfile::Parser
281
282
  end
282
283
 
283
284
  def parse_PLATFORMS # :nodoc:
284
- while not @tokens.empty? and :text == peek.first do
285
+ while !@tokens.empty? && :text == peek.first do
285
286
  name = get(:text).value
286
287
 
287
288
  @platforms << name
@@ -331,7 +332,7 @@ class Gem::RequestSet::Lockfile::Parser
331
332
  set.find_all(requirement)
332
333
  end.compact.first
333
334
 
334
- specification && specification.version
335
+ specification&.version
335
336
  end
336
337
 
337
338
  ##
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'parser'
2
+
3
+ #) frozen_string_literal: true
4
+ require_relative "parser"
3
5
 
4
6
  class Gem::RequestSet::Lockfile::Tokenizer
5
7
  Token = Struct.new :type, :value, :column, :line
@@ -26,7 +28,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
26
28
  end
27
29
 
28
30
  def skip(type)
29
- @tokens.shift while not @tokens.empty? and peek.type == type
31
+ @tokens.shift while !@tokens.empty? && peek.type == type
30
32
  end
31
33
 
32
34
  ##
@@ -57,7 +59,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
57
59
  private
58
60
 
59
61
  def tokenize(input)
60
- require 'strscan'
62
+ require "strscan"
61
63
  s = StringScanner.new input
62
64
 
63
65
  until s.eos? do
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # Parses a gem.deps.rb.lock file and constructs a LockSet containing the
4
5
  # dependencies found inside. If the lock file is missing no LockSet is
@@ -76,7 +77,7 @@ class Gem::RequestSet::Lockfile
76
77
  @gem_deps_file = File.expand_path(gem_deps_file)
77
78
  @gem_deps_dir = File.dirname(@gem_deps_file)
78
79
 
79
- if RUBY_VERSION < '2.7'
80
+ if RUBY_VERSION < "2.7"
80
81
  @gem_deps_file.untaint unless gem_deps_file.tainted?
81
82
  end
82
83
 
@@ -106,7 +107,7 @@ class Gem::RequestSet::Lockfile
106
107
  out << " specs:"
107
108
 
108
109
  requests.sort_by {|request| request.name }.each do |request|
109
- next if request.spec.name == 'bundler'
110
+ next if request.spec.name == "bundler"
110
111
  platform = "-#{request.spec.platform}" unless
111
112
  Gem::Platform::RUBY == request.spec.platform
112
113
 
@@ -156,7 +157,7 @@ class Gem::RequestSet::Lockfile
156
157
  if dest.index(base) == 0
157
158
  offset = dest[base.size + 1..-1]
158
159
 
159
- return '.' unless offset
160
+ return "." unless offset
160
161
 
161
162
  offset
162
163
  else
@@ -224,7 +225,7 @@ class Gem::RequestSet::Lockfile
224
225
  def write
225
226
  content = to_s
226
227
 
227
- File.open "#{@gem_deps_file}.lock", 'w' do |io|
228
+ File.open "#{@gem_deps_file}.lock", "w" do |io|
228
229
  io.write content
229
230
  end
230
231
  end
@@ -236,4 +237,4 @@ class Gem::RequestSet::Lockfile
236
237
  end
237
238
  end
238
239
 
239
- require_relative 'lockfile/tokenizer'
240
+ require_relative "lockfile/tokenizer"