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,381 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/indexer"
5
-
6
- class TestGemIndexer < Gem::TestCase
7
- def setup
8
- super
9
-
10
- util_make_gems
11
-
12
- @d2_0 = util_spec "d", "2.0" do |s|
13
- s.date = Gem::Specification::TODAY - 86_400 * 3
14
- end
15
- util_build_gem @d2_0
16
-
17
- @d2_0_a = util_spec "d", "2.0.a"
18
- util_build_gem @d2_0_a
19
-
20
- @d2_0_b = util_spec "d", "2.0.b"
21
- util_build_gem @d2_0_b
22
-
23
- @default = new_default_spec "default", 2
24
- install_default_gems @default
25
-
26
- @indexerdir = File.join(@tempdir, "indexer")
27
-
28
- gems = File.join(@indexerdir, "gems")
29
- FileUtils.mkdir_p gems
30
- FileUtils.mv Dir[File.join(@gemhome, "cache", "*.gem")], gems
31
-
32
- @indexer = Gem::Indexer.new(@indexerdir)
33
- end
34
-
35
- def teardown
36
- FileUtils.rm_rf(@indexer.directory)
37
- ensure
38
- super
39
- end
40
-
41
- def with_indexer(dir, **opts)
42
- indexer = Gem::Indexer.new(dir, **opts)
43
- build_directory = indexer.directory
44
- yield indexer
45
- ensure
46
- FileUtils.rm_rf(build_directory) if build_directory
47
- end
48
-
49
- def test_initialize
50
- assert_equal @indexerdir, @indexer.dest_directory
51
- Dir.mktmpdir("gem_generate_index") do |tmpdir|
52
- assert_match %r{#{tmpdir.match(/.*-/)}}, @indexer.directory
53
- end
54
-
55
- with_indexer(@indexerdir) do |indexer|
56
- assert_predicate indexer, :build_modern
57
- end
58
-
59
- with_indexer(@indexerdir, :build_modern => true) do |indexer|
60
- assert_predicate indexer, :build_modern
61
- end
62
- end
63
-
64
- def test_build_indices
65
- @indexer.make_temp_directories
66
-
67
- use_ui @ui do
68
- @indexer.build_indices
69
- end
70
-
71
- specs_path = File.join @indexer.directory, "specs.#{@marshal_version}"
72
- specs_dump = Gem.read_binary specs_path
73
- specs = Marshal.load specs_dump
74
-
75
- expected = [["a", Gem::Version.new("1"), "ruby"],
76
- ["a", Gem::Version.new("2"), "ruby"],
77
- ["a_evil", Gem::Version.new("9"), "ruby"],
78
- ["b", Gem::Version.new("2"), "ruby"],
79
- ["c", Gem::Version.new("1.2"), "ruby"],
80
- ["d", Gem::Version.new("2.0"), "ruby"],
81
- ["dep_x", Gem::Version.new("1"), "ruby"],
82
- ["pl", Gem::Version.new("1"), "i386-linux"],
83
- ["x", Gem::Version.new("1"), "ruby"]]
84
-
85
- assert_equal expected, specs
86
-
87
- latest_specs_path = File.join(@indexer.directory,
88
- "latest_specs.#{@marshal_version}")
89
- latest_specs_dump = Gem.read_binary latest_specs_path
90
- latest_specs = Marshal.load latest_specs_dump
91
-
92
- expected = [["a", Gem::Version.new("2"), "ruby"],
93
- ["a_evil", Gem::Version.new("9"), "ruby"],
94
- ["b", Gem::Version.new("2"), "ruby"],
95
- ["c", Gem::Version.new("1.2"), "ruby"],
96
- ["d", Gem::Version.new("2.0"), "ruby"],
97
- ["dep_x", Gem::Version.new("1"), "ruby"],
98
- ["pl", Gem::Version.new("1"), "i386-linux"],
99
- ["x", Gem::Version.new("1"), "ruby"]]
100
-
101
- assert_equal expected, latest_specs, "latest_specs"
102
- end
103
-
104
- def test_generate_index
105
- use_ui @ui do
106
- @indexer.generate_index
107
- end
108
-
109
- quickdir = File.join @indexerdir, "quick"
110
- marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
111
-
112
- assert_directory_exists quickdir
113
- assert_directory_exists marshal_quickdir
114
-
115
- assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz"
116
- assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz"
117
-
118
- refute_indexed marshal_quickdir, File.basename(@c1_2.spec_file)
119
-
120
- assert_indexed @indexerdir, "specs.#{@marshal_version}"
121
- assert_indexed @indexerdir, "specs.#{@marshal_version}.gz"
122
-
123
- assert_indexed @indexerdir, "latest_specs.#{@marshal_version}"
124
- assert_indexed @indexerdir, "latest_specs.#{@marshal_version}.gz"
125
-
126
- refute_directory_exists @indexer.directory
127
- end
128
-
129
- def test_generate_index_modern
130
- @indexer.build_modern = true
131
-
132
- use_ui @ui do
133
- @indexer.generate_index
134
- end
135
-
136
- refute_indexed @indexerdir, "yaml"
137
- refute_indexed @indexerdir, "yaml.Z"
138
- refute_indexed @indexerdir, "Marshal.#{@marshal_version}"
139
- refute_indexed @indexerdir, "Marshal.#{@marshal_version}.Z"
140
-
141
- quickdir = File.join @indexerdir, "quick"
142
- marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
143
-
144
- assert_directory_exists quickdir, "quickdir should be directory"
145
- assert_directory_exists marshal_quickdir
146
-
147
- refute_indexed quickdir, "index"
148
- refute_indexed quickdir, "index.rz"
149
-
150
- refute_indexed quickdir, "latest_index"
151
- refute_indexed quickdir, "latest_index.rz"
152
-
153
- refute_indexed quickdir, "#{File.basename(@a1.spec_file)}.rz"
154
- refute_indexed quickdir, "#{File.basename(@a2.spec_file)}.rz"
155
- refute_indexed quickdir, "#{File.basename(@b2.spec_file)}.rz"
156
- refute_indexed quickdir, "#{File.basename(@c1_2.spec_file)}.rz"
157
-
158
- refute_indexed quickdir, "#{@pl1.original_name}.gemspec.rz"
159
- refute_indexed quickdir, "#{File.basename(@pl1.spec_file)}.rz"
160
-
161
- assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz"
162
- assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz"
163
-
164
- refute_indexed quickdir, "#{File.basename(@c1_2.spec_file)}"
165
- refute_indexed marshal_quickdir, "#{File.basename(@c1_2.spec_file)}"
166
-
167
- assert_indexed @indexerdir, "specs.#{@marshal_version}"
168
- assert_indexed @indexerdir, "specs.#{@marshal_version}.gz"
169
-
170
- assert_indexed @indexerdir, "latest_specs.#{@marshal_version}"
171
- assert_indexed @indexerdir, "latest_specs.#{@marshal_version}.gz"
172
- end
173
-
174
- def test_generate_index_modern_back_to_back
175
- @indexer.build_modern = true
176
-
177
- use_ui @ui do
178
- @indexer.generate_index
179
- end
180
-
181
- with_indexer @indexerdir do |indexer|
182
- indexer.build_modern = true
183
-
184
- use_ui @ui do
185
- indexer.generate_index
186
- end
187
- quickdir = File.join @indexerdir, "quick"
188
- marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
189
-
190
- assert_directory_exists quickdir
191
- assert_directory_exists marshal_quickdir
192
-
193
- assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz"
194
- assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz"
195
-
196
- assert_indexed @indexerdir, "specs.#{@marshal_version}"
197
- assert_indexed @indexerdir, "specs.#{@marshal_version}.gz"
198
-
199
- assert_indexed @indexerdir, "latest_specs.#{@marshal_version}"
200
- assert_indexed @indexerdir, "latest_specs.#{@marshal_version}.gz"
201
- end
202
- end
203
-
204
- def test_generate_index_ui
205
- use_ui @ui do
206
- @indexer.generate_index
207
- end
208
-
209
- assert_match %r{^\.\.\.\.\.\.\.\.\.\.\.\.$}, @ui.output
210
- assert_match %r{^Generating Marshal quick index gemspecs for 12 gems$},
211
- @ui.output
212
- assert_match %r{^Complete$}, @ui.output
213
- assert_match %r{^Generating specs index$}, @ui.output
214
- assert_match %r{^Generating latest specs index$}, @ui.output
215
- assert_match %r{^Generating prerelease specs index$}, @ui.output
216
- assert_match %r{^Complete$}, @ui.output
217
- assert_match %r{^Compressing indices$}, @ui.output
218
-
219
- assert_equal "", @ui.error
220
- end
221
-
222
- def test_generate_index_specs
223
- use_ui @ui do
224
- @indexer.generate_index
225
- end
226
-
227
- specs_path = File.join @indexerdir, "specs.#{@marshal_version}"
228
-
229
- specs_dump = Gem.read_binary specs_path
230
- specs = Marshal.load specs_dump
231
-
232
- expected = [
233
- ["a", Gem::Version.new(1), "ruby"],
234
- ["a", Gem::Version.new(2), "ruby"],
235
- ["a_evil", Gem::Version.new(9), "ruby"],
236
- ["b", Gem::Version.new(2), "ruby"],
237
- ["c", Gem::Version.new("1.2"), "ruby"],
238
- ["d", Gem::Version.new("2.0"), "ruby"],
239
- ["dep_x", Gem::Version.new(1), "ruby"],
240
- ["pl", Gem::Version.new(1), "i386-linux"],
241
- ["x", Gem::Version.new(1), "ruby"],
242
- ]
243
-
244
- assert_equal expected, specs
245
-
246
- assert_same specs[0].first, specs[1].first,
247
- "identical names not identical"
248
-
249
- assert_same specs[0][1], specs[-1][1],
250
- "identical versions not identical"
251
-
252
- assert_same specs[0].last, specs[1].last,
253
- "identical platforms not identical"
254
-
255
- refute_same specs[1][1], specs[5][1],
256
- "different versions not different"
257
- end
258
-
259
- def test_generate_index_latest_specs
260
- use_ui @ui do
261
- @indexer.generate_index
262
- end
263
-
264
- latest_specs_path = File.join @indexerdir, "latest_specs.#{@marshal_version}"
265
-
266
- latest_specs_dump = Gem.read_binary latest_specs_path
267
- latest_specs = Marshal.load latest_specs_dump
268
-
269
- expected = [
270
- ["a", Gem::Version.new(2), "ruby"],
271
- ["a_evil", Gem::Version.new(9), "ruby"],
272
- ["b", Gem::Version.new(2), "ruby"],
273
- ["c", Gem::Version.new("1.2"), "ruby"],
274
- ["d", Gem::Version.new("2.0"), "ruby"],
275
- ["dep_x", Gem::Version.new(1), "ruby"],
276
- ["pl", Gem::Version.new(1), "i386-linux"],
277
- ["x", Gem::Version.new(1), "ruby"],
278
- ]
279
-
280
- assert_equal expected, latest_specs
281
-
282
- assert_same latest_specs[0][1], latest_specs[2][1],
283
- "identical versions not identical"
284
-
285
- assert_same latest_specs[0].last, latest_specs[1].last,
286
- "identical platforms not identical"
287
- end
288
-
289
- def test_generate_index_prerelease_specs
290
- use_ui @ui do
291
- @indexer.generate_index
292
- end
293
-
294
- prerelease_specs_path = File.join @indexerdir, "prerelease_specs.#{@marshal_version}"
295
-
296
- prerelease_specs_dump = Gem.read_binary prerelease_specs_path
297
- prerelease_specs = Marshal.load prerelease_specs_dump
298
-
299
- assert_equal [["a", Gem::Version.new("3.a"), "ruby"],
300
- ["d", Gem::Version.new("2.0.a"), "ruby"],
301
- ["d", Gem::Version.new("2.0.b"), "ruby"]],
302
- prerelease_specs
303
- end
304
-
305
- ##
306
- # Emulate the starting state of Gem::Specification in a live environment,
307
- # where it will carry the list of system gems
308
- def with_system_gems
309
- Gem::Specification.reset
310
-
311
- sys_gem = util_spec "systemgem", "1.0"
312
- util_build_gem sys_gem
313
- install_default_gems sys_gem
314
- yield
315
- util_remove_gem sys_gem
316
- end
317
-
318
- def test_update_index
319
- use_ui @ui do
320
- @indexer.generate_index
321
- end
322
-
323
- quickdir = File.join @indexerdir, "quick"
324
- marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
325
-
326
- assert_directory_exists quickdir
327
- assert_directory_exists marshal_quickdir
328
-
329
- @d2_1 = util_spec "d", "2.1"
330
- util_build_gem @d2_1
331
- @d2_1_tuple = [@d2_1.name, @d2_1.version, @d2_1.original_platform]
332
-
333
- @d2_1_a = util_spec "d", "2.2.a"
334
- util_build_gem @d2_1_a
335
- @d2_1_a_tuple = [@d2_1_a.name, @d2_1_a.version, @d2_1_a.original_platform]
336
-
337
- gems = File.join @indexerdir, "gems"
338
-
339
- FileUtils.mv @d2_1.cache_file, gems
340
- FileUtils.mv @d2_1_a.cache_file, gems
341
-
342
- with_system_gems do
343
- use_ui @ui do
344
- @indexer.update_index
345
- end
346
-
347
- assert_indexed marshal_quickdir, "#{File.basename(@d2_1.spec_file)}.rz"
348
-
349
- specs_index = Marshal.load Gem.read_binary(@indexer.dest_specs_index)
350
-
351
- assert_includes specs_index, @d2_1_tuple
352
- refute_includes specs_index, @d2_1_a_tuple
353
-
354
- latest_specs_index = Marshal.load \
355
- Gem.read_binary(@indexer.dest_latest_specs_index)
356
-
357
- assert_includes latest_specs_index, @d2_1_tuple
358
- assert_includes latest_specs_index,
359
- [@d2_0.name, @d2_0.version, @d2_0.original_platform]
360
- refute_includes latest_specs_index, @d2_1_a_tuple
361
-
362
- pre_specs_index = Marshal.load \
363
- Gem.read_binary(@indexer.dest_prerelease_specs_index)
364
-
365
- assert_includes pre_specs_index, @d2_1_a_tuple
366
- refute_includes pre_specs_index, @d2_1_tuple
367
-
368
- refute_directory_exists @indexer.directory
369
- end
370
- end
371
-
372
- def assert_indexed(dir, name)
373
- file = File.join dir, name
374
- assert File.exist?(file), "#{file} does not exist"
375
- end
376
-
377
- def refute_indexed(dir, name)
378
- file = File.join dir, name
379
- refute File.exist?(file), "#{file} exists"
380
- end
381
- end
@@ -1,208 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "installer_test_case"
4
- require "rubygems/install_update_options"
5
- require "rubygems/command"
6
- require "rubygems/dependency_installer"
7
-
8
- class TestGemInstallUpdateOptions < Gem::InstallerTestCase
9
- def setup
10
- super
11
-
12
- @cmd = Gem::Command.new "dummy", "dummy",
13
- Gem::DependencyInstaller::DEFAULT_OPTIONS
14
- @cmd.extend Gem::InstallUpdateOptions
15
- @cmd.add_install_update_options
16
- end
17
-
18
- def test_add_install_update_options
19
- args = %w[
20
- --document
21
- --build-root build_root
22
- --format-exec
23
- --ignore-dependencies
24
- --document
25
- -E
26
- -f
27
- -i /install_to
28
- -w
29
- --post-install-message
30
- ]
31
-
32
- args.concat %w[--vendor] unless Gem.java_platform?
33
-
34
- args.concat %w[-P HighSecurity] if Gem::HAVE_OPENSSL
35
-
36
- assert @cmd.handles?(args)
37
- end
38
-
39
- def test_build_root
40
- @cmd.handle_options %w[--build-root build_root]
41
-
42
- assert_equal File.expand_path("build_root"), @cmd.options[:build_root]
43
- end
44
-
45
- def test_doc
46
- @cmd.handle_options %w[--doc]
47
-
48
- assert_equal %w[ri], @cmd.options[:document].sort
49
- end
50
-
51
- def test_doc_rdoc
52
- @cmd.handle_options %w[--doc=rdoc]
53
-
54
- assert_equal %w[rdoc], @cmd.options[:document]
55
-
56
- @cmd.handle_options %w[--doc ri]
57
-
58
- assert_equal %w[ri], @cmd.options[:document]
59
- end
60
-
61
- def test_doc_rdoc_ri
62
- @cmd.handle_options %w[--doc=rdoc,ri]
63
-
64
- assert_equal %w[rdoc ri], @cmd.options[:document]
65
- end
66
-
67
- def test_doc_no
68
- @cmd.handle_options %w[--no-doc]
69
-
70
- assert_equal [], @cmd.options[:document]
71
- end
72
-
73
- def test_document
74
- @cmd.handle_options %w[--document]
75
-
76
- assert_equal %w[ri], @cmd.options[:document].sort
77
- end
78
-
79
- def test_document_no
80
- @cmd.handle_options %w[--no-document]
81
-
82
- assert_equal %w[], @cmd.options[:document]
83
- end
84
-
85
- def test_document_rdoc
86
- @cmd.handle_options %w[--document=rdoc]
87
-
88
- assert_equal %w[rdoc], @cmd.options[:document]
89
-
90
- @cmd.handle_options %w[--document ri]
91
-
92
- assert_equal %w[ri], @cmd.options[:document]
93
- end
94
-
95
- def test_security_policy
96
- pend "openssl is missing" unless Gem::HAVE_OPENSSL
97
-
98
- @cmd.handle_options %w[-P HighSecurity]
99
-
100
- assert_equal Gem::Security::HighSecurity, @cmd.options[:security_policy]
101
- end
102
-
103
- def test_security_policy_unknown
104
- pend "openssl is missing" unless Gem::HAVE_OPENSSL
105
-
106
- @cmd.add_install_update_options
107
-
108
- e = assert_raise Gem::OptionParser::InvalidArgument do
109
- @cmd.handle_options %w[-P UnknownSecurity]
110
- end
111
- assert_includes e.message, "UnknownSecurity"
112
- end
113
-
114
- def test_user_install_enabled
115
- @spec = quick_gem "a" do |spec|
116
- util_make_exec spec
117
- end
118
-
119
- util_build_gem @spec
120
- @gem = @spec.cache_file
121
-
122
- @cmd.handle_options %w[--user-install]
123
-
124
- assert @cmd.options[:user_install]
125
-
126
- @installer = Gem::Installer.at @gem, @cmd.options
127
- @installer.install
128
- assert_path_exist File.join(Gem.user_dir, "gems")
129
- assert_path_exist File.join(Gem.user_dir, "gems", @spec.full_name)
130
- end
131
-
132
- def test_user_install_disabled_read_only
133
- @spec = quick_gem "a" do |spec|
134
- util_make_exec spec
135
- end
136
-
137
- util_build_gem @spec
138
- @gem = @spec.cache_file
139
-
140
- if win_platform?
141
- pend("test_user_install_disabled_read_only test skipped on MS Windows")
142
- elsif Process.uid.zero?
143
- pend("test_user_install_disabled_read_only test skipped in root privilege")
144
- else
145
- @cmd.handle_options %w[--no-user-install]
146
-
147
- refute @cmd.options[:user_install]
148
-
149
- FileUtils.chmod 0o755, @userhome
150
- FileUtils.chmod 0o000, @gemhome
151
-
152
- Gem.use_paths @gemhome, @userhome
153
-
154
- assert_raise(Gem::FilePermissionError) do
155
- Gem::Installer.at(@gem, @cmd.options).install
156
- end
157
- end
158
- ensure
159
- FileUtils.chmod 0o755, @gemhome
160
- end
161
-
162
- def test_vendor
163
- vendordir(File.join(@tempdir, "vendor")) do
164
- @cmd.handle_options %w[--vendor]
165
-
166
- assert @cmd.options[:vendor]
167
- assert_equal Gem.vendor_dir, @cmd.options[:install_dir]
168
- end
169
- end
170
-
171
- def test_vendor_missing
172
- vendordir(nil) do
173
- e = assert_raise Gem::OptionParser::InvalidOption do
174
- @cmd.handle_options %w[--vendor]
175
- end
176
-
177
- assert_equal "invalid option: --vendor your platform is not supported",
178
- e.message
179
-
180
- refute @cmd.options[:vendor]
181
- refute @cmd.options[:install_dir]
182
- end
183
- end
184
-
185
- def test_post_install_message_no
186
- @cmd.handle_options %w[--no-post-install-message]
187
-
188
- assert_equal false, @cmd.options[:post_install_message]
189
- end
190
-
191
- def test_post_install_message
192
- @cmd.handle_options %w[--post-install-message]
193
-
194
- assert_equal true, @cmd.options[:post_install_message]
195
- end
196
-
197
- def test_minimal_deps_no
198
- @cmd.handle_options %w[--no-minimal-deps]
199
-
200
- assert_equal false, @cmd.options[:minimal_deps]
201
- end
202
-
203
- def test_minimal_deps
204
- @cmd.handle_options %w[--minimal-deps]
205
-
206
- assert_equal true, @cmd.options[:minimal_deps]
207
- end
208
- end