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,857 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/commands/exec_command"
5
-
6
- class TestGemCommandsExecCommand < Gem::TestCase
7
- def setup
8
- @orig_args = Gem::Command.build_args
9
- @orig_specific_extra_args = Gem::Command.specific_extra_args_hash.dup
10
- @orig_extra_args = Gem::Command.extra_args.dup
11
-
12
- super
13
- common_installer_setup
14
-
15
- @cmd = Gem::Commands::ExecCommand.new
16
-
17
- @gem_home = Gem.dir
18
- @gem_path = Gem.path
19
- @test_arch = RbConfig::CONFIG["arch"]
20
-
21
- @installed_specs = []
22
- Gem.post_install {|installer| @installed_specs << installer.spec }
23
- end
24
-
25
- def teardown
26
- super
27
-
28
- common_installer_teardown
29
-
30
- Gem::Command.build_args = @orig_args
31
- Gem::Command.specific_extra_args_hash = @orig_specific_extra_args
32
- Gem::Command.extra_args = @orig_extra_args
33
- Gem.configuration = nil
34
- end
35
-
36
- def invoke(*args)
37
- @ui.outs.truncate(0)
38
- @ui.outs.rewind
39
- @ui.errs.truncate(0)
40
- @ui.errs.rewind
41
- @installed_specs.clear
42
-
43
- @cmd.invoke(*args)
44
- ensure
45
- Gem::Specification.unresolved_deps.clear
46
- Gem.loaded_specs.clear
47
- Gem.instance_variable_set(:@activated_gem_paths, 0)
48
- Gem.clear_default_specs
49
- Gem.use_paths(@gem_home, @gem_path)
50
- Gem.refresh
51
- end
52
-
53
- def test_error_with_no_arguments
54
- e = assert_raise Gem::CommandLineError do
55
- @cmd.invoke
56
- end
57
- assert_equal "Please specify an executable to run (e.g. gem exec COMMAND)",
58
- e.message
59
- end
60
-
61
- def test_error_with_no_executable
62
- e = assert_raise Gem::CommandLineError do
63
- @cmd.invoke "--verbose", "--gem", "GEM", "--version", "< 10", "--conservative"
64
- end
65
- assert_equal "Please specify an executable to run (e.g. gem exec COMMAND)",
66
- e.message
67
- end
68
-
69
- def test_full_option_parsing
70
- @cmd.when_invoked do |options|
71
- assert_equal options, {
72
- args: ["install", "--no-color", "--help", "--verbose"],
73
- executable: "pod",
74
- :explicit_prerelease => false,
75
- gem_name: "cocoapods",
76
- prerelease: false,
77
- :version => Gem::Requirement.new(["> 1", "< 1.3"]),
78
- build_args: nil,
79
- }
80
- end
81
- @cmd.invoke "--gem", "cocoapods", "-v", "> 1", "--version", "< 1.3", "--verbose", "--", "pod", "install", "--no-color", "--help", "--verbose"
82
- end
83
-
84
- def test_single_arg_parsing
85
- @cmd.when_invoked do |options|
86
- assert_equal options, {
87
- args: [],
88
- executable: "rails",
89
- gem_name: "rails",
90
- :version => Gem::Requirement.new([">= 0"]),
91
- build_args: nil,
92
- }
93
- end
94
- @cmd.invoke "rails"
95
- end
96
-
97
- def test_single_arg_parsing_with_version
98
- @cmd.when_invoked do |options|
99
- assert_equal options, {
100
- args: [],
101
- executable: "rails",
102
- gem_name: "rails",
103
- :version => Gem::Requirement.new(["= 7.1"]),
104
- build_args: nil,
105
- }
106
- end
107
- @cmd.invoke "rails:7.1"
108
- end
109
-
110
- def test_gem_without_executable
111
- spec_fetcher do |fetcher|
112
- fetcher.gem "a", 2
113
- end
114
-
115
- util_clear_gems
116
-
117
- use_ui @ui do
118
- e = assert_raise Gem::MockGemUi::TermError, @ui.error do
119
- @cmd.invoke "a:2"
120
- end
121
- assert_equal 1, e.exit_code
122
- assert_equal "ERROR: Failed to load executable `a`, are you sure the gem `a` contains it?\n", @ui.error
123
- end
124
- end
125
-
126
- def test_gem_with_executable
127
- spec_fetcher do |fetcher|
128
- fetcher.gem "a", 2 do |s|
129
- s.executables = %w[a]
130
- s.files = %w[bin/a lib/a.rb]
131
-
132
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
133
- f << "Gem.ui.say #{s.original_name.dump}"
134
- end
135
- end
136
- end
137
-
138
- util_clear_gems
139
-
140
- use_ui @ui do
141
- @cmd.invoke "a:2"
142
- assert_equal "a-2\n", @ui.output
143
- end
144
- end
145
-
146
- def test_gem_with_platforms
147
- spec_fetcher do |fetcher|
148
- fetcher.download "a", 2 do |s|
149
- s.executables = %w[a]
150
- s.files = %w[bin/a lib/a.rb]
151
-
152
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
153
- f << "Gem.ui.say #{s.original_name.dump}"
154
- end
155
- end
156
-
157
- fetcher.download "a", 2 do |s|
158
- s.executables = %w[a]
159
- s.files = %w[bin/a lib/a.rb]
160
- s.platform = "x86_64-darwin"
161
-
162
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
163
- f << "Gem.ui.say #{s.original_name.dump}"
164
- end
165
- end
166
- end
167
-
168
- use_ui @ui do
169
- invoke "a:2"
170
- assert_equal "a-2\n", @ui.output
171
- end
172
-
173
- use_ui @ui do
174
- util_set_arch "x86_64-darwin-18"
175
- invoke "a:2"
176
- assert_equal "a-2-x86_64-darwin\n", @ui.output
177
- end
178
- end
179
-
180
- def test_gem_with_platform_dependencies
181
- spec_fetcher do |fetcher|
182
- fetcher.download "a", 2 do |s|
183
- s.executables = %w[a]
184
- s.files = %w[bin/a lib/a.rb]
185
- s.add_runtime_dependency "with_platform"
186
-
187
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
188
- f << 'require "with_platform"' << "\n"
189
- f << 'Gem.ui.say Gem.loaded_specs.each_value.map(&:original_name).sort.join("\n")'
190
- end
191
- end
192
-
193
- fetcher.download "with_platform", 2 do |s|
194
- s.files = %w[lib/with_platform.rb]
195
- s.platform = Gem::Platform.local
196
- end
197
-
198
- fetcher.download "with_platform", 2 do |s|
199
- s.files = %w[lib/with_platform.rb]
200
- end
201
- end
202
-
203
- use_ui @ui do
204
- util_set_arch "unknown-unknown"
205
- invoke "a"
206
- assert_equal "a-2\nwith_platform-2\n", @ui.output
207
- end
208
-
209
- use_ui @ui do
210
- util_set_arch @test_arch
211
- invoke "a"
212
- assert_empty @ui.error
213
- assert_equal "a-2\nwith_platform-2-#{Gem::Platform.local}\n", @ui.output
214
- end
215
- end
216
-
217
- def test_gem_with_platform_and_platform_dependencies
218
- pend "extensions don't quite work on jruby" if Gem.java_platform?
219
- pend "terminates on mswin" if vc_windows? && ruby_repo?
220
-
221
- spec_fetcher do |fetcher|
222
- fetcher.download "a", 2 do |s|
223
- s.executables = %w[a]
224
- s.files = %w[bin/a lib/a.rb]
225
- s.add_runtime_dependency "with_platform"
226
- s.platform = Gem::Platform.local.to_s
227
-
228
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
229
- f << 'require "with_platform"' << "\n"
230
- f << 'Gem.ui.say Gem.loaded_specs.each_value.map(&:original_name).sort.join("\n")'
231
- end
232
- end
233
-
234
- fetcher.download "a", 2 do |s|
235
- s.executables = %w[a]
236
- s.files = %w[bin/a lib/a.rb extconf.rb]
237
- s.add_runtime_dependency "with_platform"
238
-
239
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
240
- f << 'require "with_platform"' << "\n"
241
- f << 'Gem.ui.say Gem.loaded_specs.each_value.map(&:original_name).sort.join("\n")'
242
- end
243
-
244
- s.extensions = %w[extconf.rb]
245
- write_file File.join(*%W[gems #{s.original_name} extconf.rb]) do |f|
246
- f.write <<-RUBY
247
- gem('with_platform', '~> 2.0')
248
- require 'with_platform'
249
- gem 'sometimes_used'
250
- require 'sometimes_used'
251
- require "mkmf"
252
- create_makefile("#{s.name}")
253
- RUBY
254
- end
255
- end
256
-
257
- fetcher.download "with_platform", 2 do |s|
258
- s.files = %w[lib/with_platform.rb]
259
- s.platform = Gem::Platform.local.to_s
260
- end
261
-
262
- fetcher.download "with_platform", 2 do |s|
263
- s.files = %w[lib/with_platform.rb]
264
- s.add_runtime_dependency "sometimes_used"
265
- end
266
-
267
- fetcher.download "sometimes_used", 2 do |s|
268
- s.files = %w[lib/sometimes_used.rb]
269
- end
270
- end
271
-
272
- use_ui @ui do
273
- util_set_arch "unknown-unknown"
274
- invoke "a"
275
- assert_empty @ui.error
276
- assert_equal "Building native extensions. This could take a while...\na-2\nsometimes_used-2\nwith_platform-2\n", @ui.output
277
- end
278
-
279
- use_ui @ui do
280
- util_set_arch @test_arch
281
- invoke "a"
282
- assert_empty @ui.error
283
- assert_equal "a-2-#{Gem::Platform.local}\nwith_platform-2-#{Gem::Platform.local}\n", @ui.output
284
- end
285
- end
286
-
287
- def test_gem_with_other_executable_name
288
- spec_fetcher do |fetcher|
289
- fetcher.gem "a", 2 do |s|
290
- s.executables = %w[foo]
291
- s.files = %w[bin/foo lib/a.rb]
292
-
293
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
294
- f << "Gem.ui.say #{s.original_name.dump}"
295
- end
296
- end
297
- end
298
-
299
- util_clear_gems
300
-
301
- use_ui @ui do
302
- @cmd.invoke "a:2"
303
- assert_equal "a-2\n", @ui.output
304
- end
305
- end
306
-
307
- def test_gem_with_executable_error
308
- spec_fetcher do |fetcher|
309
- fetcher.gem "a", 2 do |s|
310
- s.executables = %w[foo]
311
- s.files = %w[bin/foo lib/a.rb]
312
-
313
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
314
- f << "raise #{s.original_name.dump}"
315
- end
316
- end
317
- end
318
-
319
- util_clear_gems
320
-
321
- use_ui @ui do
322
- e = assert_raise RuntimeError do
323
- @cmd.invoke "a:2"
324
- end
325
- assert_equal "a-2", e.message
326
- assert_empty @ui.error
327
- end
328
- end
329
-
330
- def test_gem_with_multiple_executables_one_match
331
- spec_fetcher do |fetcher|
332
- fetcher.gem "a", 2 do |s|
333
- s.executables = %w[foo a]
334
- s.files = %w[bin/foo bin/a lib/a.rb]
335
-
336
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
337
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
338
- end
339
-
340
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
341
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
342
- end
343
- end
344
- end
345
-
346
- util_clear_gems
347
-
348
- use_ui @ui do
349
- @cmd.invoke "a:2"
350
- assert_equal "a-2 a\n", @ui.output
351
- end
352
- end
353
-
354
- def test_gem_with_multiple_executables_no_match
355
- spec_fetcher do |fetcher|
356
- fetcher.gem "a", 2 do |s|
357
- s.executables = %w[foo bar]
358
- s.files = %w[bin/foo bin/bar lib/a.rb]
359
-
360
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
361
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
362
- end
363
-
364
- write_file File.join(*%W[gems #{s.original_name} bin bar]) do |f|
365
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
366
- end
367
- end
368
- end
369
-
370
- util_clear_gems
371
-
372
- use_ui @ui do
373
- @cmd.invoke "a:2"
374
- assert_equal "a-2 foo\n", @ui.output
375
- end
376
- end
377
-
378
- def test_gem_dependency_contains_executable
379
- spec_fetcher do |fetcher|
380
- fetcher.gem "a", 2 do |s|
381
- s.executables = %w[]
382
- s.files = %w[lib/a.rb]
383
-
384
- s.add_dependency "b"
385
- end
386
-
387
- fetcher.gem "b", 2 do |s|
388
- s.executables = %w[a]
389
- s.files = %w[bin/a lib/b.rb]
390
-
391
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
392
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
393
- end
394
- end
395
- end
396
-
397
- util_clear_gems
398
-
399
- use_ui @ui do
400
- @cmd.invoke "a:2"
401
- assert_equal "b-2 a\n", @ui.output
402
- end
403
- end
404
-
405
- def test_gem_dependency_contains_other_executable
406
- spec_fetcher do |fetcher|
407
- fetcher.gem "a", 2 do |s|
408
- s.executables = %w[]
409
- s.files = %w[lib/a.rb]
410
-
411
- s.add_dependency "b"
412
- end
413
-
414
- fetcher.gem "b", 2 do |s|
415
- s.executables = %w[foo]
416
- s.files = %w[bin/foo lib/b.rb]
417
-
418
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
419
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
420
- end
421
- end
422
- end
423
-
424
- util_clear_gems
425
-
426
- use_ui @ui do
427
- e = assert_raise Gem::MockGemUi::TermError do
428
- @cmd.invoke "a:2"
429
- end
430
- assert_equal 1, e.exit_code
431
- assert_equal <<~ERR, @ui.error
432
- ERROR: Failed to load executable `a`, are you sure the gem `a` contains it?
433
- ERR
434
- end
435
- end
436
-
437
- def test_other_gem_contains_executable
438
- spec_fetcher do |fetcher|
439
- fetcher.gem "a", 2 do |s|
440
- s.executables = %w[]
441
- s.files = %w[lib/a.rb]
442
- end
443
-
444
- fetcher.gem "b", 2 do |s|
445
- s.executables = %w[a]
446
- s.files = %w[bin/a lib/b.rb]
447
-
448
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
449
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
450
- end
451
- end
452
- end
453
-
454
- util_clear_gems
455
-
456
- use_ui @ui do
457
- e = assert_raise Gem::MockGemUi::TermError do
458
- @cmd.invoke "a:2"
459
- end
460
- assert_equal 1, e.exit_code
461
- assert_equal <<~ERR, @ui.error
462
- ERROR: Failed to load executable `a`, are you sure the gem `a` contains it?
463
- ERR
464
- end
465
- end
466
-
467
- def test_missing_gem
468
- spec_fetcher do |fetcher|
469
- end
470
-
471
- use_ui @ui do
472
- e = assert_raise Gem::MockGemUi::TermError do
473
- @cmd.invoke "a"
474
- end
475
- assert_equal 2, e.exit_code
476
- assert_equal <<~ERR, @ui.error
477
- ERROR: Could not find a valid gem 'a' (>= 0) in any repository
478
- ERR
479
- end
480
- end
481
-
482
- def test_version_mismatch
483
- spec_fetcher do |fetcher|
484
- fetcher.gem "a", 1
485
- end
486
-
487
- util_clear_gems
488
-
489
- use_ui @ui do
490
- e = assert_raise Gem::MockGemUi::TermError do
491
- @cmd.invoke "a:2"
492
- end
493
- assert_equal 2, e.exit_code
494
- assert_equal <<~ERR, @ui.error
495
- ERROR: Could not find a valid gem 'a' (= 2) in any repository
496
- ERROR: Possible alternatives: a
497
- ERR
498
- end
499
- end
500
-
501
- def test_pre_argument
502
- spec_fetcher do |fetcher|
503
- fetcher.gem "a", 1 do |s|
504
- s.executables = %w[foo]
505
- s.files = %w[bin/foo lib/a.rb]
506
-
507
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
508
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
509
- end
510
- end
511
- fetcher.gem "a", "1.1.a" do |s|
512
- s.executables = %w[foo ]
513
- s.files = %w[bin/foo lib/a.rb]
514
-
515
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
516
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
517
- end
518
- end
519
- end
520
-
521
- util_clear_gems
522
-
523
- use_ui @ui do
524
- @cmd.invoke "--pre", "a"
525
- assert_equal "a-1.1.a foo\n", @ui.output
526
- end
527
- end
528
-
529
- def test_pre_version_option
530
- spec_fetcher do |fetcher|
531
- fetcher.download "a", 1 do |s|
532
- s.executables = %w[foo]
533
- s.files = %w[bin/foo lib/a.rb]
534
-
535
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
536
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
537
- end
538
- end
539
- fetcher.download "a", "1.1.a" do |s|
540
- s.executables = %w[foo ]
541
- s.files = %w[bin/foo lib/a.rb]
542
-
543
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
544
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
545
- end
546
- end
547
- end
548
-
549
- use_ui @ui do
550
- @cmd.invoke "-v", ">= 0.a", "a"
551
- assert_equal "a-1.1.a foo\n", @ui.output
552
- end
553
- end
554
-
555
- def test_conservative_missing_gem
556
- spec_fetcher do |fetcher|
557
- fetcher.gem "a", 1 do |s|
558
- s.executables = %w[foo]
559
- s.files = %w[bin/foo lib/a.rb]
560
-
561
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
562
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
563
- end
564
- end
565
- end
566
-
567
- util_clear_gems
568
-
569
- use_ui @ui do
570
- e = assert_raise Gem::MockGemUi::TermError do
571
- @cmd.invoke "--verbose", "--conservative", "a:2"
572
- end
573
- assert_equal 2, e.exit_code
574
- assert_include @ui.output, "a (= 2) not available locally"
575
- assert_equal <<~ERROR, @ui.error
576
- ERROR: Could not find a valid gem 'a' (= 2) in any repository
577
- ERROR: Possible alternatives: a
578
- ERROR
579
- end
580
- end
581
-
582
- def test_conservative
583
- spec_fetcher do |fetcher|
584
- fetcher.download "a", 1 do |s|
585
- s.executables = %w[foo]
586
- s.files = %w[bin/foo lib/a.rb]
587
-
588
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
589
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
590
- end
591
- end
592
- end
593
-
594
- use_ui @ui do
595
- invoke "--verbose", "--conservative", "a"
596
- assert_include @ui.output, "a (>= 0) not available locally"
597
- assert_include @ui.output, "a-1 foo"
598
- assert_equal %w[a-1], @installed_specs.map(&:original_name)
599
- end
600
-
601
- spec_fetcher do |fetcher|
602
- fetcher.gem "a", 1 do |s|
603
- s.executables = %w[foo]
604
- s.files = %w[bin/foo lib/a.rb]
605
-
606
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
607
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
608
- end
609
- end
610
-
611
- fetcher.download "a", 2 do |s|
612
- s.executables = %w[foo]
613
- s.files = %w[bin/foo lib/a.rb]
614
-
615
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
616
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
617
- end
618
- end
619
- end
620
-
621
- use_ui @ui do
622
- invoke "--verbose", "--conservative", "a"
623
- assert_not_include @ui.output, "a (>= 0) not available locally"
624
- assert_include @ui.output, "a-1 foo"
625
- assert_empty @installed_specs.map(&:original_name)
626
- end
627
- end
628
-
629
- def test_uses_newest_version
630
- spec_fetcher do |fetcher|
631
- fetcher.download "a", 1 do |s|
632
- s.executables = %w[foo]
633
- s.files = %w[bin/foo lib/a.rb]
634
-
635
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
636
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
637
- end
638
- end
639
- end
640
-
641
- use_ui @ui do
642
- invoke "a"
643
- assert_include @ui.output, "a-1 foo"
644
- end
645
-
646
- spec_fetcher do |fetcher|
647
- fetcher.download "a", 1 do |s|
648
- s.executables = %w[foo]
649
- s.files = %w[bin/foo lib/a.rb]
650
-
651
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
652
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
653
- end
654
- end
655
-
656
- fetcher.download "a", 2 do |s|
657
- s.executables = %w[foo]
658
- s.files = %w[bin/foo lib/a.rb]
659
-
660
- write_file File.join(*%W[gems #{s.original_name} bin foo]) do |f|
661
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
662
- end
663
- end
664
- end
665
-
666
- use_ui @ui do
667
- invoke "--verbose", "a:2"
668
- refute_predicate @ui, :terminated?
669
- assert_empty @ui.error
670
- assert_include @ui.output, "a-2 foo"
671
- assert_equal %w[a-2], @installed_specs.map(&:original_name)
672
- end
673
- end
674
-
675
- def test_uses_newest_version_of_dependency
676
- spec_fetcher do |fetcher|
677
- fetcher.gem "a", 1 do |s|
678
- s.executables = %w[]
679
- s.files = %w[lib/a.rb]
680
- s.add_runtime_dependency "b"
681
- end
682
-
683
- fetcher.gem "b", 1 do |s|
684
- s.executables = %w[a]
685
- s.files = %w[bin/a lib/a.rb]
686
-
687
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
688
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
689
- end
690
- end
691
-
692
- fetcher.download "b", 2 do |s|
693
- s.executables = %w[a]
694
- s.files = %w[bin/a lib/a.rb]
695
-
696
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
697
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
698
- end
699
- end
700
- end
701
-
702
- use_ui @ui do
703
- invoke "a"
704
- assert_include @ui.output, "b-2 a"
705
- assert_equal %w[b-2], @installed_specs.map(&:original_name)
706
- end
707
- end
708
-
709
- def test_gem_exec_gem_uninstall
710
- spec_fetcher do |fetcher|
711
- fetcher.download "a", 2 do |s|
712
- s.executables = %w[a]
713
- s.files = %w[bin/a lib/a.rb]
714
- s.add_runtime_dependency "b"
715
-
716
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
717
- f << "Gem.ui.say #{s.original_name.dump}"
718
- end
719
- end
720
-
721
- fetcher.download "b", 2 do |s|
722
- s.files = %w[lib/b.rb]
723
- end
724
- end
725
-
726
- use_ui @ui do
727
- invoke "a:2"
728
- assert_equal "a-2\n", @ui.output
729
-
730
- invoke "gem", "list", "--local"
731
- assert_includes @ui.output, "a (2)\n"
732
- assert_includes @ui.output, "b (2)\n"
733
-
734
- begin
735
- invoke "gem", "uninstall", "--verbose", "-x", "a"
736
- rescue StandardError
737
- nil
738
- end
739
- refute_includes @ui.output, "running gem exec with"
740
- assert_includes @ui.output, "Successfully uninstalled a-2\n"
741
-
742
- invoke "--verbose", "gem", "uninstall", "b"
743
- assert_includes @ui.output, "Successfully uninstalled b-2\n"
744
-
745
- invoke "gem", "list", "--local"
746
- assert_empty @ui.error
747
- assert_match(/\A\s*\** LOCAL GEMS \**\s*\z/m, @ui.output)
748
-
749
- invoke "gem", "env", "GEM_HOME"
750
- assert_equal "#{@gem_home}/gem_exec\n", @ui.output
751
- end
752
- end
753
-
754
- def test_only_prerelease_available
755
- spec_fetcher do |fetcher|
756
- fetcher.download "a", "1.a" do |s|
757
- s.executables = %w[a]
758
- s.files = %w[lib/a.rb bin/a]
759
-
760
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
761
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
762
- end
763
- end
764
- end
765
-
766
- use_ui @ui do
767
- assert_raise Gem::MockGemUi::TermError do
768
- invoke "a"
769
- end
770
- assert_equal "ERROR: Could not find a valid gem 'a' (>= 0) in any repository\n" +
771
- "ERROR: Possible alternatives: a\n", @ui.error
772
- assert_empty @ui.output
773
- assert_empty @installed_specs
774
- end
775
-
776
- use_ui @ui do
777
- invoke "a:1.a"
778
- assert_empty @ui.error
779
- assert_equal "a-1.a a\n", @ui.output
780
- assert_equal %w[a-1.a], @installed_specs.map(&:full_name)
781
- end
782
-
783
- FileUtils.rm_rf Gem.dir
784
-
785
- use_ui @ui do
786
- invoke "--version", ">= 1.a", "a"
787
- assert_empty @ui.error
788
- assert_equal "a-1.a a\n", @ui.output
789
- assert_equal %w[a-1.a], @installed_specs.map(&:full_name)
790
- end
791
-
792
- FileUtils.rm_rf Gem.dir
793
-
794
- use_ui @ui do
795
- invoke "--pre", "a"
796
- assert_empty @ui.error
797
- assert_equal "a-1.a a\n", @ui.output
798
- assert_equal %w[a-1.a], @installed_specs.map(&:full_name)
799
- end
800
- end
801
-
802
- def test_newer_prerelease_available
803
- spec_fetcher do |fetcher|
804
- fetcher.download "a", "1" do |s|
805
- s.executables = %w[a]
806
- s.files = %w[lib/a.rb bin/a]
807
-
808
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
809
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
810
- end
811
- end
812
-
813
- fetcher.download "a", "1.1.a" do |s|
814
- s.executables = %w[a]
815
- s.files = %w[lib/a.rb bin/a]
816
-
817
- write_file File.join(*%W[gems #{s.original_name} bin a]) do |f|
818
- f << "Gem.ui.say #{s.original_name.dump} + ' ' + File.basename(__FILE__)"
819
- end
820
- end
821
- end
822
-
823
- use_ui @ui do
824
- invoke "a"
825
- assert_empty @ui.error
826
- assert_equal "a-1 a\n", @ui.output
827
- assert_equal %w[a-1], @installed_specs.map(&:full_name)
828
- end
829
-
830
- FileUtils.rm_rf Gem.dir
831
-
832
- use_ui @ui do
833
- invoke "a:1.1.a"
834
- assert_empty @ui.error
835
- assert_equal "a-1.1.a a\n", @ui.output
836
- assert_equal %w[a-1.1.a], @installed_specs.map(&:full_name)
837
- end
838
-
839
- FileUtils.rm_rf Gem.dir
840
-
841
- use_ui @ui do
842
- invoke "--version", ">= 1.a", "a"
843
- assert_empty @ui.error
844
- assert_equal "a-1.1.a a\n", @ui.output
845
- assert_equal %w[a-1.1.a], @installed_specs.map(&:full_name)
846
- end
847
-
848
- FileUtils.rm_rf Gem.dir
849
-
850
- use_ui @ui do
851
- invoke "--pre", "a"
852
- assert_empty @ui.error
853
- assert_equal "a-1.1.a a\n", @ui.output
854
- assert_equal %w[a-1.1.a], @installed_specs.map(&:full_name)
855
- end
856
- end
857
- end