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
@@ -1,505 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/requirement"
5
-
6
- class TestGemRequirement < Gem::TestCase
7
- def test_concat
8
- r = req ">= 1"
9
-
10
- r.concat ["< 2"]
11
-
12
- assert_equal [[">=", v(1)], ["<", v(2)]], r.requirements
13
- end
14
-
15
- def test_equals2
16
- r = req "= 1.2"
17
- assert_equal r, r.dup
18
- assert_equal r.dup, r
19
-
20
- refute_requirement_equal "= 1.2", "= 1.3"
21
- refute_requirement_equal "= 1.3", "= 1.2"
22
-
23
- refute_requirement_equal "~> 1.3", "~> 1.3.0"
24
- refute_requirement_equal "~> 1.3.0", "~> 1.3"
25
-
26
- assert_requirement_equal ["> 2", "~> 1.3", "~> 1.3.1"], ["~> 1.3.1", "~> 1.3", "> 2"]
27
-
28
- assert_requirement_equal ["> 2", "~> 1.3"], ["> 2.0", "~> 1.3"]
29
- assert_requirement_equal ["> 2.0", "~> 1.3"], ["> 2", "~> 1.3"]
30
-
31
- refute_equal Object.new, req("= 1.2")
32
- refute_equal req("= 1.2"), Object.new
33
- end
34
-
35
- def test_initialize
36
- assert_requirement_equal "= 2", "2"
37
- assert_requirement_equal "= 2", ["2"]
38
- assert_requirement_equal "= 2", v(2)
39
- assert_requirement_equal "2.0", "2"
40
- end
41
-
42
- def test_create
43
- assert_equal req("= 1"), Gem::Requirement.create("= 1")
44
- assert_equal req(">= 1.2", "<= 1.3"), Gem::Requirement.create([">= 1.2", "<= 1.3"])
45
- assert_equal req(">= 1.2", "<= 1.3"), Gem::Requirement.create(">= 1.2", "<= 1.3")
46
- end
47
-
48
- def test_empty_requirements_is_none
49
- r = Gem::Requirement.new
50
- assert_equal true, r.none?
51
- end
52
-
53
- def test_explicit_default_is_none
54
- r = Gem::Requirement.new ">= 0"
55
- assert_equal true, r.none?
56
- end
57
-
58
- def test_basic_non_none
59
- r = Gem::Requirement.new "= 1"
60
- assert_equal false, r.none?
61
- end
62
-
63
- def test_for_lockfile
64
- assert_equal " (~> 1.0)", req("~> 1.0").for_lockfile
65
-
66
- assert_equal " (~> 1.0, >= 1.0.1)", req(">= 1.0.1", "~> 1.0").for_lockfile
67
-
68
- duped = req "= 1.0"
69
- duped.requirements << ["=", v("1.0")]
70
-
71
- assert_equal " (= 1.0)", duped.for_lockfile
72
-
73
- assert_nil Gem::Requirement.default.for_lockfile
74
- end
75
-
76
- def test_parse
77
- assert_equal ["=", Gem::Version.new(1)], Gem::Requirement.parse(" 1")
78
- assert_equal ["=", Gem::Version.new(1)], Gem::Requirement.parse("= 1")
79
- assert_equal [">", Gem::Version.new(1)], Gem::Requirement.parse("> 1")
80
- assert_equal ["=", Gem::Version.new(1)], Gem::Requirement.parse("=\n1")
81
- assert_equal ["=", Gem::Version.new(1)], Gem::Requirement.parse("1.0")
82
-
83
- assert_equal ["=", Gem::Version.new(2)],
84
- Gem::Requirement.parse(Gem::Version.new("2"))
85
- end
86
-
87
- unless (Gem.java_platform? && ENV["JRUBY_OPTS"].to_s.include?("--debug"))
88
- def test_parse_deduplication
89
- assert_same "~>", Gem::Requirement.parse("~> 1").first
90
- end
91
- end
92
-
93
- def test_parse_bad
94
- [
95
- nil,
96
- "",
97
- "! 1",
98
- "= junk",
99
- "1..2",
100
- ].each do |bad|
101
- e = assert_raise Gem::Requirement::BadRequirementError do
102
- Gem::Requirement.parse bad
103
- end
104
-
105
- assert_equal "Illformed requirement [#{bad.inspect}]", e.message
106
- end
107
-
108
- assert_equal Gem::Requirement::BadRequirementError.superclass, ArgumentError
109
- end
110
-
111
- def test_prerelease_eh
112
- r = req "= 1"
113
-
114
- refute r.prerelease?
115
-
116
- r = req "= 1.a"
117
-
118
- assert r.prerelease?
119
-
120
- r = req "> 1.a", "< 2"
121
-
122
- assert r.prerelease?
123
- end
124
-
125
- def test_satisfied_by_eh_bang_equal
126
- r = req "!= 1.2"
127
-
128
- assert_satisfied_by "1.1", r
129
- refute_satisfied_by "1.2", r
130
- assert_satisfied_by "1.3", r
131
-
132
- assert_raise ArgumentError do
133
- Gem::Deprecate.skip_during do
134
- assert_satisfied_by nil, r
135
- end
136
- end
137
- end
138
-
139
- def test_satisfied_by_eh_blank
140
- r = req "1.2"
141
-
142
- refute_satisfied_by "1.1", r
143
- assert_satisfied_by "1.2", r
144
- refute_satisfied_by "1.3", r
145
-
146
- assert_raise ArgumentError do
147
- Gem::Deprecate.skip_during do
148
- assert_satisfied_by nil, r
149
- end
150
- end
151
- end
152
-
153
- def test_satisfied_by_eh_equal
154
- r = req "= 1.2"
155
-
156
- refute_satisfied_by "1.1", r
157
- assert_satisfied_by "1.2", r
158
- refute_satisfied_by "1.3", r
159
-
160
- assert_raise ArgumentError do
161
- Gem::Deprecate.skip_during do
162
- assert_satisfied_by nil, r
163
- end
164
- end
165
- end
166
-
167
- def test_satisfied_by_eh_gt
168
- r = req "> 1.2"
169
-
170
- refute_satisfied_by "1.1", r
171
- refute_satisfied_by "1.2", r
172
- assert_satisfied_by "1.3", r
173
-
174
- assert_raise ArgumentError do
175
- r.satisfied_by? nil
176
- end
177
- end
178
-
179
- def test_satisfied_by_eh_gte
180
- r = req ">= 1.2"
181
-
182
- refute_satisfied_by "1.1", r
183
- assert_satisfied_by "1.2", r
184
- assert_satisfied_by "1.3", r
185
-
186
- assert_raise ArgumentError do
187
- r.satisfied_by? nil
188
- end
189
- end
190
-
191
- def test_satisfied_by_eh_list
192
- r = req "> 1.1", "< 1.3"
193
-
194
- refute_satisfied_by "1.1", r
195
- assert_satisfied_by "1.2", r
196
- refute_satisfied_by "1.3", r
197
-
198
- assert_raise ArgumentError do
199
- r.satisfied_by? nil
200
- end
201
- end
202
-
203
- def test_satisfied_by_eh_lt
204
- r = req "< 1.2"
205
-
206
- assert_satisfied_by "1.1", r
207
- refute_satisfied_by "1.2", r
208
- refute_satisfied_by "1.3", r
209
-
210
- assert_raise ArgumentError do
211
- r.satisfied_by? nil
212
- end
213
- end
214
-
215
- def test_satisfied_by_eh_lte
216
- r = req "<= 1.2"
217
-
218
- assert_satisfied_by "1.1", r
219
- assert_satisfied_by "1.2", r
220
- refute_satisfied_by "1.3", r
221
-
222
- assert_raise ArgumentError do
223
- r.satisfied_by? nil
224
- end
225
- end
226
-
227
- def test_satisfied_by_eh_tilde_gt
228
- r = req "~> 1.2"
229
-
230
- refute_satisfied_by "1.1", r
231
- assert_satisfied_by "1.2", r
232
- assert_satisfied_by "1.3", r
233
-
234
- assert_raise ArgumentError do
235
- r.satisfied_by? nil
236
- end
237
- end
238
-
239
- def test_satisfied_by_eh_tilde_gt_v0
240
- r = req "~> 0.0.1"
241
-
242
- refute_satisfied_by "0.1.1", r
243
- assert_satisfied_by "0.0.2", r
244
- assert_satisfied_by "0.0.1", r
245
- end
246
-
247
- def test_satisfied_by_eh_good
248
- assert_satisfied_by "0.2.33", "= 0.2.33"
249
- assert_satisfied_by "0.2.34", "> 0.2.33"
250
- assert_satisfied_by "1.0", "= 1.0"
251
- assert_satisfied_by "1.0.0", "= 1.0"
252
- assert_satisfied_by "1.0", "= 1.0.0"
253
- assert_satisfied_by "1.0", "1.0"
254
- assert_satisfied_by "1.8.2", "> 1.8.0"
255
- assert_satisfied_by "1.112", "> 1.111"
256
- assert_satisfied_by "0.2", "> 0.0.0"
257
- assert_satisfied_by "0.0.0.0.0.2", "> 0.0.0"
258
- assert_satisfied_by "0.0.1.0", "> 0.0.0.1"
259
- assert_satisfied_by "10.3.2", "> 9.3.2"
260
- assert_satisfied_by "1.0.0.0", "= 1.0"
261
- assert_satisfied_by "10.3.2", "!= 9.3.4"
262
- assert_satisfied_by "10.3.2", "> 9.3.2"
263
- assert_satisfied_by " 9.3.2", ">= 9.3.2"
264
- assert_satisfied_by "9.3.2 ", ">= 9.3.2"
265
- assert_satisfied_by "", "= 0"
266
- assert_satisfied_by "", "< 0.1"
267
- assert_satisfied_by " ", "< 0.1 "
268
- assert_satisfied_by "", " < 0.1"
269
- assert_satisfied_by " ", "> 0.a "
270
- assert_satisfied_by "", " > 0.a"
271
- assert_satisfied_by "3.1", "< 3.2.rc1"
272
-
273
- assert_satisfied_by "3.2.0", "> 3.2.0.rc1"
274
- assert_satisfied_by "3.2.0.rc2", "> 3.2.0.rc1"
275
-
276
- assert_satisfied_by "3.0.rc2", "< 3.0"
277
- assert_satisfied_by "3.0.rc2", "< 3.0.0"
278
- assert_satisfied_by "3.0.rc2", "< 3.0.1"
279
-
280
- assert_satisfied_by "3.0.rc2", "> 0"
281
-
282
- assert_satisfied_by "5.0.0.rc2", "~> 5.a"
283
- refute_satisfied_by "5.0.0.rc2", "~> 5.x"
284
-
285
- assert_satisfied_by "5.0.0", "~> 5.a"
286
- assert_satisfied_by "5.0.0", "~> 5.x"
287
- end
288
-
289
- def test_illformed_requirements
290
- [ ">>> 1.3.5", "> blah" ].each do |rq|
291
- assert_raise Gem::Requirement::BadRequirementError, "req [#{rq}] should fail" do
292
- Gem::Requirement.new rq
293
- end
294
- end
295
- end
296
-
297
- def test_satisfied_by_eh_non_versions
298
- assert_raise ArgumentError do
299
- req(">= 0").satisfied_by? Object.new
300
- end
301
-
302
- assert_raise ArgumentError do
303
- req(">= 0").satisfied_by? Gem::Requirement.default
304
- end
305
- end
306
-
307
- def test_satisfied_by_eh_boxed
308
- refute_satisfied_by "1.3", "~> 1.4"
309
- assert_satisfied_by "1.4", "~> 1.4"
310
- assert_satisfied_by "1.5", "~> 1.4"
311
- refute_satisfied_by "2.0", "~> 1.4"
312
-
313
- refute_satisfied_by "1.3", "~> 1.4.4"
314
- refute_satisfied_by "1.4", "~> 1.4.4"
315
- assert_satisfied_by "1.4.4", "~> 1.4.4"
316
- assert_satisfied_by "1.4.5", "~> 1.4.4"
317
- refute_satisfied_by "1.5", "~> 1.4.4"
318
- refute_satisfied_by "2.0", "~> 1.4.4"
319
-
320
- refute_satisfied_by "1.1.pre", "~> 1.0.0"
321
- refute_satisfied_by "1.1.pre", "~> 1.1"
322
- refute_satisfied_by "2.0.a", "~> 1.0"
323
- refute_satisfied_by "2.0.a", "~> 2.0"
324
-
325
- refute_satisfied_by "0.9", "~> 1"
326
- assert_satisfied_by "1.0", "~> 1"
327
- assert_satisfied_by "1.1", "~> 1"
328
- refute_satisfied_by "2.0", "~> 1"
329
- end
330
-
331
- def test_satisfied_by_eh_multiple
332
- req = [">= 1.4", "<= 1.6", "!= 1.5"]
333
-
334
- refute_satisfied_by "1.3", req
335
- assert_satisfied_by "1.4", req
336
- refute_satisfied_by "1.5", req
337
- assert_satisfied_by "1.6", req
338
- refute_satisfied_by "1.7", req
339
- refute_satisfied_by "2.0", req
340
- end
341
-
342
- def test_satisfied_by_boxed
343
- refute_satisfied_by "1.3", "~> 1.4"
344
- assert_satisfied_by "1.4", "~> 1.4"
345
- assert_satisfied_by "1.4.0", "~> 1.4"
346
- assert_satisfied_by "1.5", "~> 1.4"
347
- refute_satisfied_by "2.0", "~> 1.4"
348
-
349
- refute_satisfied_by "1.3", "~> 1.4.4"
350
- refute_satisfied_by "1.4", "~> 1.4.4"
351
- assert_satisfied_by "1.4.4", "~> 1.4.4"
352
- assert_satisfied_by "1.4.5", "~> 1.4.4"
353
- refute_satisfied_by "1.5", "~> 1.4.4"
354
- refute_satisfied_by "2.0", "~> 1.4.4"
355
- end
356
-
357
- def test_satisfied_by_explicitly_bounded
358
- req = [">= 1.4.4", "< 1.5"]
359
-
360
- assert_satisfied_by "1.4.5", req
361
- assert_satisfied_by "1.5.0.rc1", req
362
- refute_satisfied_by "1.5.0", req
363
-
364
- req = [">= 1.4.4", "< 1.5.a"]
365
-
366
- assert_satisfied_by "1.4.5", req
367
- refute_satisfied_by "1.5.0.rc1", req
368
- refute_satisfied_by "1.5.0", req
369
- end
370
-
371
- def test_specific
372
- refute req("> 1") .specific?
373
- refute req(">= 1").specific?
374
-
375
- assert req("!= 1").specific?
376
- assert req("< 1") .specific?
377
- assert req("<= 1").specific?
378
- assert req("= 1") .specific?
379
- assert req("~> 1").specific?
380
-
381
- assert req("> 1", "> 2").specific? # GIGO
382
- end
383
-
384
- def test_bad
385
- refute_satisfied_by "", "> 0.1"
386
- refute_satisfied_by "1.2.3", "!= 1.2.3"
387
- refute_satisfied_by "1.2.003.0.0", "!= 1.02.3"
388
- refute_satisfied_by "4.5.6", "< 1.2.3"
389
- refute_satisfied_by "1.0", "> 1.1"
390
- refute_satisfied_by "", "= 0.1"
391
- refute_satisfied_by "1.1.1", "> 1.1.1"
392
- refute_satisfied_by "1.2", "= 1.1"
393
- refute_satisfied_by "1.40", "= 1.1"
394
- refute_satisfied_by "1.3", "= 1.40"
395
- refute_satisfied_by "9.3.3", "<= 9.3.2"
396
- refute_satisfied_by "9.3.1", ">= 9.3.2"
397
- refute_satisfied_by "9.3.03", "<= 9.3.2"
398
- refute_satisfied_by "1.0.0.1", "= 1.0"
399
- end
400
-
401
- def test_hash_with_multiple_versions
402
- r1 = req("1.0", "2.0")
403
- r2 = req("2.0", "1.0")
404
- assert_equal r1.hash, r2.hash
405
-
406
- r1 = req("1.0", "2.0").tap {|r| r.concat(["3.0"]) }
407
- r2 = req("3.0", "1.0").tap {|r| r.concat(["2.0"]) }
408
- assert_equal r1.hash, r2.hash
409
- end
410
-
411
- def test_hash_returns_equal_hashes_for_equivalent_requirements
412
- refute_requirement_hash_equal "= 1.2", "= 1.3"
413
- refute_requirement_hash_equal "= 1.3", "= 1.2"
414
-
415
- refute_requirement_hash_equal "~> 1.3", "~> 1.3.0"
416
- refute_requirement_hash_equal "~> 1.3.0", "~> 1.3"
417
-
418
- assert_requirement_hash_equal ["> 2", "~> 1.3", "~> 1.3.1"], ["~> 1.3.1", "~> 1.3", "> 2"]
419
-
420
- assert_requirement_hash_equal ["> 2", "~> 1.3"], ["> 2.0", "~> 1.3"]
421
- assert_requirement_hash_equal ["> 2.0", "~> 1.3"], ["> 2", "~> 1.3"]
422
-
423
- assert_requirement_hash_equal "= 1.0", "= 1.0.0"
424
- assert_requirement_hash_equal "= 1.1", "= 1.1.0"
425
- assert_requirement_hash_equal "= 1", "= 1.0.0"
426
-
427
- assert_requirement_hash_equal "1.0", "1.0.0"
428
- assert_requirement_hash_equal "1.1", "1.1.0"
429
- assert_requirement_hash_equal "1", "1.0.0"
430
- end
431
-
432
- class Exploit < RuntimeError
433
- end
434
-
435
- def self.exploit(arg)
436
- raise Exploit, "arg = #{arg}"
437
- end
438
-
439
- def test_marshal_load_attack
440
- wa = Net::WriteAdapter.allocate
441
- wa.instance_variable_set(:@socket, self.class)
442
- wa.instance_variable_set(:@method_id, :exploit)
443
- request_set = Gem::RequestSet.allocate
444
- request_set.instance_variable_set(:@git_set, "id")
445
- request_set.instance_variable_set(:@sets, wa)
446
- wa = Net::WriteAdapter.allocate
447
- wa.instance_variable_set(:@socket, request_set)
448
- wa.instance_variable_set(:@method_id, :resolve)
449
- ent = Gem::Package::TarReader::Entry.allocate
450
- ent.instance_variable_set(:@read, 0)
451
- ent.instance_variable_set(:@header, "aaa")
452
- io = Net::BufferedIO.allocate
453
- io.instance_variable_set(:@io, ent)
454
- io.instance_variable_set(:@debug_output, wa)
455
- reader = Gem::Package::TarReader.allocate
456
- reader.instance_variable_set(:@io, io)
457
- requirement = Gem::Requirement.allocate
458
- requirement.instance_variable_set(:@requirements, reader)
459
- m = [Gem::SpecFetcher, Gem::Installer, requirement]
460
- e = assert_raise(TypeError) do
461
- Marshal.load(Marshal.dump(m))
462
- end
463
- assert_equal(e.message, "wrong @requirements")
464
- end
465
-
466
- # Assert that two requirements are equal. Handles Gem::Requirements,
467
- # strings, arrays, numbers, and versions.
468
-
469
- def assert_requirement_equal(expected, actual)
470
- assert_equal req(expected), req(actual)
471
- end
472
-
473
- # Assert that +version+ satisfies +requirement+.
474
-
475
- def assert_satisfied_by(version, requirement)
476
- assert req(requirement).satisfied_by?(v(version)),
477
- "#{requirement} is satisfied by #{version}"
478
- end
479
-
480
- # Assert that two requirement hashes are equal. Handles Gem::Requirements,
481
- # strings, arrays, numbers, and versions.
482
-
483
- def assert_requirement_hash_equal(expected, actual)
484
- assert_equal req(expected).hash, req(actual).hash
485
- end
486
-
487
- # Refute the assumption that two requirements are equal.
488
-
489
- def refute_requirement_equal(unexpected, actual)
490
- refute_equal req(unexpected), req(actual)
491
- end
492
-
493
- # Refute the assumption that +version+ satisfies +requirement+.
494
-
495
- def refute_satisfied_by(version, requirement)
496
- refute req(requirement).satisfied_by?(v(version)),
497
- "#{requirement} is not satisfied by #{version}"
498
- end
499
-
500
- # Refute the assumption that two requirements hashes are equal.
501
-
502
- def refute_requirement_hash_equal(unexpected, actual)
503
- refute_equal req(unexpected).hash, req(actual).hash
504
- end
505
- end