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,708 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/commands/pristine_command"
5
-
6
- class TestGemCommandsPristineCommand < Gem::TestCase
7
- def setup
8
- super
9
- common_installer_setup
10
-
11
- @cmd = Gem::Commands::PristineCommand.new
12
- end
13
-
14
- def test_execute
15
- a = util_spec "a" do |s|
16
- s.executables = %w[foo]
17
- s.files = %w[bin/foo lib/a.rb]
18
- end
19
-
20
- write_file File.join(@tempdir, "lib", "a.rb") do |fp|
21
- fp.puts "puts __FILE__"
22
- end
23
- write_file File.join(@tempdir, "bin", "foo") do |fp|
24
- fp.puts "#!/usr/bin/ruby"
25
- end
26
-
27
- install_gem a
28
-
29
- foo_path = File.join @gemhome, "gems", a.full_name, "bin", "foo"
30
- a_rb_path = File.join @gemhome, "gems", a.full_name, "lib", "a.rb"
31
-
32
- write_file foo_path do |io|
33
- io.puts "I changed it!"
34
- end
35
-
36
- write_file a_rb_path do |io|
37
- io.puts "I changed it!"
38
- end
39
-
40
- @cmd.options[:args] = %w[a]
41
-
42
- use_ui @ui do
43
- @cmd.execute
44
- end
45
-
46
- assert_equal "#!/usr/bin/ruby\n", File.read(foo_path), foo_path
47
- assert_equal "puts __FILE__\n", File.read(a_rb_path), a_rb_path
48
-
49
- out = @ui.output.split "\n"
50
-
51
- assert_equal "Restoring gems to pristine condition...", out.shift
52
- assert_equal "Restored #{a.full_name}", out.shift
53
- assert_empty out, out.inspect
54
- end
55
-
56
- def test_execute_user_install
57
- FileUtils.chmod 0o555, @gemhome
58
-
59
- a = util_spec "a" do |s|
60
- s.executables = %w[foo]
61
- s.files = %w[bin/foo lib/a.rb]
62
- end
63
-
64
- write_file File.join(@tempdir, "lib", "a.rb") do |fp|
65
- fp.puts "puts __FILE__"
66
- end
67
-
68
- write_file File.join(@tempdir, "bin", "foo") do |fp|
69
- fp.puts "#!/usr/bin/ruby"
70
- end
71
-
72
- install_gem_user(a)
73
-
74
- Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
75
-
76
- foo_path = File.join(Gem.user_dir, "gems", a.full_name, "bin", "foo")
77
- a_rb_path = File.join(Gem.user_dir, "gems", a.full_name, "lib", "a.rb")
78
-
79
- write_file foo_path do |io|
80
- io.puts("I changed it!")
81
- end
82
-
83
- write_file a_rb_path do |io|
84
- io.puts("I changed it!")
85
- end
86
-
87
- @cmd.options[:args] = %w[a]
88
-
89
- use_ui @ui do
90
- @cmd.execute
91
- end
92
-
93
- assert_equal "#!/usr/bin/ruby\n", File.read(foo_path), foo_path
94
- assert_equal "puts __FILE__\n", File.read(a_rb_path), a_rb_path
95
-
96
- out = @ui.output.split("\n")
97
-
98
- assert_equal "Restoring gems to pristine condition...", out.shift
99
- assert_equal "Restored #{a.full_name}", out.shift
100
- assert_empty out, out.inspect
101
- ensure
102
- FileUtils.chmod(0o755, @gemhome)
103
- end
104
-
105
- def test_execute_all
106
- a = util_spec "a" do |s|
107
- s.executables = %w[foo]
108
- end
109
-
110
- write_file File.join(@tempdir, "bin", "foo") do |fp|
111
- fp.puts "#!/usr/bin/ruby"
112
- end
113
-
114
- install_gem a
115
-
116
- gem_bin = File.join @gemhome, "gems", a.full_name, "bin", "foo"
117
- gem_stub = File.join @gemhome, "bin", "foo"
118
-
119
- FileUtils.rm gem_bin
120
- FileUtils.rm gem_stub
121
-
122
- @cmd.handle_options %w[--all]
123
-
124
- use_ui @ui do
125
- @cmd.execute
126
- end
127
-
128
- assert File.exist?(gem_bin)
129
- assert File.exist?(gem_stub)
130
-
131
- out = @ui.output.split "\n"
132
-
133
- assert_equal "Restoring gems to pristine condition...", out.shift
134
- assert_equal "Restored #{a.full_name}", out.shift
135
- assert_empty out, out.inspect
136
- end
137
-
138
- def test_execute_env_shebang
139
- a = util_spec "a" do |s|
140
- s.executables = %w[foo]
141
- s.files = %w[bin/foo]
142
- end
143
- write_file File.join(@tempdir, "bin", "foo") do |fp|
144
- fp.puts "#!/usr/bin/ruby"
145
- end
146
-
147
- install_gem a
148
-
149
- gem_exec = File.join @gemhome, "bin", "foo"
150
-
151
- FileUtils.rm gem_exec
152
-
153
- @cmd.handle_options %w[--all --env-shebang]
154
-
155
- use_ui @ui do
156
- @cmd.execute
157
- end
158
-
159
- assert_path_exist gem_exec
160
-
161
- ruby_exec = sprintf Gem.default_exec_format, "ruby"
162
-
163
- bin_env = win_platform? ? "" : %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) } + " "
164
-
165
- assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(gem_exec)
166
- end
167
-
168
- def test_execute_extensions_explicit
169
- a = util_spec "a" do |s|
170
- s.extensions << "ext/a/extconf.rb"
171
- end
172
-
173
- ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
174
- write_file ext_path do |io|
175
- io.write <<-'RUBY'
176
- File.open "Makefile", "w" do |f|
177
- f.puts "clean:\n\techo cleaned\n"
178
- f.puts "all:\n\techo built\n"
179
- f.puts "install:\n\techo installed\n"
180
- end
181
- RUBY
182
- end
183
-
184
- b = util_spec "b"
185
-
186
- install_gem a
187
- install_gem b
188
-
189
- @cmd.options[:extensions] = true
190
- @cmd.options[:extensions_set] = true
191
- @cmd.options[:args] = []
192
-
193
- use_ui @ui do
194
- @cmd.execute
195
- end
196
-
197
- out = @ui.output.split "\n"
198
-
199
- assert_equal "Restoring gems to pristine condition...", out.shift
200
- assert_equal "Building native extensions. This could take a while...",
201
- out.shift
202
- assert_equal "Restored #{a.full_name}", out.shift
203
- assert_empty out, out.inspect
204
- end
205
-
206
- def test_execute_extensions_only_missing_extensions
207
- a = util_spec "a" do |s|
208
- s.extensions << "ext/a/extconf.rb"
209
- end
210
-
211
- ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
212
- write_file ext_path do |io|
213
- io.write <<-'RUBY'
214
- File.open "Makefile", "w" do |f|
215
- f.puts "clean:\n\techo cleaned\n"
216
- f.puts "all:\n\techo built\n"
217
- f.puts "install:\n\techo installed\n"
218
- end
219
- RUBY
220
- end
221
-
222
- b = util_spec "b" do |s|
223
- s.extensions << "ext/b/extconf.rb"
224
- end
225
-
226
- ext_path = File.join @tempdir, "ext", "b", "extconf.rb"
227
- write_file ext_path do |io|
228
- io.write <<-'RUBY'
229
- File.open "Makefile", "w" do |f|
230
- f.puts "clean:\n\techo cleaned\n"
231
- f.puts "all:\n\techo built\n"
232
- f.puts "install:\n\techo installed\n"
233
- end
234
- RUBY
235
- end
236
-
237
- install_gem a
238
- install_gem b
239
-
240
- # Remove the extension files for b
241
- FileUtils.rm_rf b.gem_build_complete_path
242
-
243
- @cmd.options[:only_missing_extensions] = true
244
- @cmd.options[:args] = []
245
-
246
- use_ui @ui do
247
- @cmd.execute
248
- end
249
-
250
- refute_includes @ui.output, "Restored #{a.full_name}"
251
- assert_includes @ui.output, "Restored #{b.full_name}"
252
- end
253
-
254
- def test_execute_no_extension
255
- a = util_spec "a" do |s|
256
- s.extensions << "ext/a/extconf.rb"
257
- end
258
-
259
- ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
260
- write_file ext_path do |io|
261
- io.write "# extconf.rb\nrequire 'mkmf'; create_makefile 'a'"
262
- end
263
-
264
- install_gem a
265
-
266
- @cmd.options[:args] = %w[a]
267
- @cmd.options[:extensions] = false
268
-
269
- use_ui @ui do
270
- @cmd.execute
271
- end
272
-
273
- out = @ui.output.split "\n"
274
-
275
- assert_equal "Restoring gems to pristine condition...", out.shift
276
- assert_equal "Skipped #{a.full_name}, it needs to compile an extension",
277
- out.shift
278
- assert_empty out, out.inspect
279
- end
280
-
281
- def test_execute_with_extension_with_build_args
282
- a = util_spec "a" do |s|
283
- s.extensions << "ext/a/extconf.rb"
284
- end
285
-
286
- ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
287
- write_file ext_path do |io|
288
- io.write <<-'RUBY'
289
- File.open "Makefile", "w" do |f|
290
- f.puts "clean:\n\techo cleaned\n"
291
- f.puts "all:\n\techo built\n"
292
- f.puts "install:\n\techo installed\n"
293
- end
294
- RUBY
295
- end
296
-
297
- build_args = %w[--with-awesome=true --sweet]
298
-
299
- install_gem a, :build_args => build_args
300
-
301
- @cmd.options[:args] = %w[a]
302
-
303
- use_ui @ui do
304
- @cmd.execute
305
- end
306
-
307
- out = @ui.output.split "\n"
308
-
309
- assert_equal "Restoring gems to pristine condition...", out.shift
310
- assert_equal "Building native extensions with: '--with-awesome=true --sweet'", out.shift
311
- assert_equal "This could take a while...", out.shift
312
- assert_equal "Restored #{a.full_name}", out.shift
313
- assert_empty out, out.inspect
314
- end
315
-
316
- def test_execute_many
317
- a = util_spec "a"
318
- b = util_spec "b"
319
-
320
- install_gem a
321
- install_gem b
322
-
323
- @cmd.options[:args] = %w[a b]
324
-
325
- use_ui @ui do
326
- @cmd.execute
327
- end
328
-
329
- out = @ui.output.split "\n"
330
-
331
- assert_equal "Restoring gems to pristine condition...", out.shift
332
- assert_equal "Restored #{a.full_name}", out.shift
333
- assert_equal "Restored #{b.full_name}", out.shift
334
- assert_empty out, out.inspect
335
- end
336
-
337
- def test_skip
338
- a = util_spec "a"
339
- b = util_spec "b"
340
-
341
- install_gem a
342
- install_gem b
343
-
344
- @cmd.options[:args] = %w[a b]
345
- @cmd.options[:skip] = "a"
346
-
347
- use_ui @ui do
348
- @cmd.execute
349
- end
350
-
351
- out = @ui.output.split "\n"
352
-
353
- assert_equal "Restoring gems to pristine condition...", out.shift
354
- assert_equal "Skipped #{a.full_name}, it was given through options", out.shift
355
- assert_equal "Restored #{b.full_name}", out.shift
356
- assert_empty out, out.inspect
357
- end
358
-
359
- def test_skip_many_gems
360
- a = util_spec "a"
361
- b = util_spec "b"
362
- c = util_spec "c"
363
-
364
- install_gem a
365
- install_gem b
366
- install_gem c
367
-
368
- @cmd.options[:args] = %w[a b c]
369
- @cmd.options[:skip] = ["a", "c"]
370
-
371
- use_ui @ui do
372
- @cmd.execute
373
- end
374
-
375
- out = @ui.output.split "\n"
376
-
377
- assert_equal "Restoring gems to pristine condition...", out.shift
378
- assert_equal "Skipped #{a.full_name}, it was given through options", out.shift
379
- assert_equal "Restored #{b.full_name}", out.shift
380
- assert_equal "Skipped #{c.full_name}, it was given through options", out.shift
381
- assert_empty out, out.inspect
382
- end
383
-
384
- def test_execute_many_multi_repo
385
- a = util_spec "a"
386
- install_gem a
387
-
388
- Gem.clear_paths
389
- gemhome2 = File.join @tempdir, "gemhome2"
390
- Gem.use_paths gemhome2, [gemhome2, @gemhome]
391
-
392
- b = util_spec "b"
393
- install_gem b
394
-
395
- @cmd.options[:args] = %w[a b]
396
-
397
- use_ui @ui do
398
- @cmd.execute
399
- end
400
-
401
- out = @ui.output.split "\n"
402
-
403
- assert_equal "Restoring gems to pristine condition...", out.shift
404
- assert_equal "Restored #{a.full_name}", out.shift
405
- assert_equal "Restored #{b.full_name}", out.shift
406
- assert_empty out, out.inspect
407
-
408
- assert_path_exist File.join(@gemhome, "gems", "a-2")
409
- assert_path_not_exist File.join(gemhome2, "gems", "a-2")
410
- assert_path_exist File.join(gemhome2, "gems", "b-2")
411
- assert_path_not_exist File.join(@gemhome, "gems", "b-2")
412
- end
413
-
414
- def test_execute_missing_cache_gem
415
- specs = spec_fetcher do |fetcher|
416
- fetcher.gem "a", 1
417
- fetcher.gem "a", 2
418
- fetcher.gem "a", 3
419
- fetcher.gem "a", "3.a"
420
- end
421
-
422
- FileUtils.rm specs["a-2"].cache_file
423
-
424
- @cmd.options[:args] = %w[a]
425
-
426
- use_ui @ui do
427
- @cmd.execute
428
- end
429
-
430
- out = @ui.output.split "\n"
431
-
432
- [
433
- "Restoring gems to pristine condition...",
434
- "Restored a-1",
435
- "Cached gem for a-2 not found, attempting to fetch...",
436
- "Restored a-2",
437
- "Restored a-3.a",
438
- "Restored a-3",
439
- ].each do |line|
440
- assert_equal line, out.shift
441
- end
442
-
443
- assert_empty out, out.inspect
444
- end
445
-
446
- def test_execute_missing_cache_gem_when_multi_repo
447
- specs = spec_fetcher do |fetcher|
448
- fetcher.gem "a", 1
449
- fetcher.gem "b", 1
450
- end
451
-
452
- FileUtils.rm_rf File.join(@gemhome, "gems", "a-1")
453
- FileUtils.rm_rf File.join(@gemhome, "gems", "b-1")
454
-
455
- install_gem specs["a-1"]
456
- FileUtils.rm File.join(@gemhome, "cache", "a-1.gem")
457
-
458
- Gem.clear_paths
459
- gemhome2 = File.join(@tempdir, "gemhome2")
460
- Gem.use_paths gemhome2, [gemhome2, @gemhome]
461
-
462
- install_gem specs["b-1"]
463
- FileUtils.rm File.join(gemhome2, "cache", "b-1.gem")
464
- Gem::Specification.reset
465
-
466
- @cmd.options[:args] = %w[a b]
467
-
468
- use_ui @ui do
469
- @cmd.execute
470
- end
471
-
472
- out = @ui.output.split "\n"
473
-
474
- [
475
- "Restoring gems to pristine condition...",
476
- "Cached gem for a-1 not found, attempting to fetch...",
477
- "Restored a-1",
478
- "Cached gem for b-1 not found, attempting to fetch...",
479
- "Restored b-1",
480
- ].each do |line|
481
- assert_equal line, out.shift
482
- end
483
-
484
- assert_empty out, out.inspect
485
- assert_empty @ui.error
486
-
487
- assert_path_exist File.join(@gemhome, "cache", "a-1.gem")
488
- assert_path_not_exist File.join(gemhome2, "cache", "a-2.gem")
489
- assert_path_exist File.join(@gemhome, "gems", "a-1")
490
- assert_path_not_exist File.join(gemhome2, "gems", "a-1")
491
-
492
- assert_path_exist File.join(gemhome2, "cache", "b-1.gem")
493
- assert_path_not_exist File.join(@gemhome, "cache", "b-2.gem")
494
- assert_path_exist File.join(gemhome2, "gems", "b-1")
495
- assert_path_not_exist File.join(@gemhome, "gems", "b-1")
496
- end
497
-
498
- def test_execute_no_gem
499
- @cmd.options[:args] = %w[]
500
-
501
- e = assert_raise Gem::CommandLineError do
502
- use_ui @ui do
503
- @cmd.execute
504
- end
505
- end
506
-
507
- assert_match %r{at least one gem name}, e.message
508
- end
509
-
510
- def test_execute_only_executables
511
- a = util_spec "a" do |s|
512
- s.executables = %w[foo]
513
- s.files = %w[bin/foo lib/a.rb]
514
- end
515
- write_file File.join(@tempdir, "lib", "a.rb") do |fp|
516
- fp.puts "puts __FILE__"
517
- end
518
- write_file File.join(@tempdir, "bin", "foo") do |fp|
519
- fp.puts "#!/usr/bin/ruby"
520
- end
521
-
522
- install_gem a
523
-
524
- gem_lib = File.join @gemhome, "gems", a.full_name, "lib", "a.rb"
525
- gem_exec = File.join @gemhome, "bin", "foo"
526
-
527
- FileUtils.rm gem_exec
528
- FileUtils.rm gem_lib
529
-
530
- @cmd.handle_options %w[--all --only-executables]
531
-
532
- use_ui @ui do
533
- @cmd.execute
534
- end
535
-
536
- assert File.exist? gem_exec
537
- refute File.exist? gem_lib
538
- end
539
-
540
- def test_execute_only_plugins
541
- a = util_spec "a" do |s|
542
- s.executables = %w[foo]
543
- s.files = %w[bin/foo lib/a.rb lib/rubygems_plugin.rb]
544
- end
545
- write_file File.join(@tempdir, "lib", "a.rb") do |fp|
546
- fp.puts "puts __FILE__"
547
- end
548
- write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |fp|
549
- fp.puts "# do nothing"
550
- end
551
- write_file File.join(@tempdir, "bin", "foo") do |fp|
552
- fp.puts "#!/usr/bin/ruby"
553
- end
554
-
555
- install_gem a
556
-
557
- gem_lib = File.join @gemhome, "gems", a.full_name, "lib", "a.rb"
558
- gem_plugin = File.join @gemhome, "plugins", "a_plugin.rb"
559
- gem_exec = File.join @gemhome, "bin", "foo"
560
-
561
- FileUtils.rm gem_exec
562
- FileUtils.rm gem_plugin
563
- FileUtils.rm gem_lib
564
-
565
- @cmd.handle_options %w[--all --only-plugins]
566
-
567
- use_ui @ui do
568
- @cmd.execute
569
- end
570
-
571
- refute File.exist? gem_exec
572
- assert File.exist? gem_plugin
573
- refute File.exist? gem_lib
574
- end
575
-
576
- def test_execute_bindir
577
- a = util_spec "a" do |s|
578
- s.name = "test_gem"
579
- s.executables = %w[foo]
580
- s.files = %w[bin/foo]
581
- end
582
-
583
- write_file File.join(@tempdir, "bin", "foo") do |fp|
584
- fp.puts "#!/usr/bin/ruby"
585
- end
586
-
587
- write_file File.join(@tempdir, "test_bin", "foo") do |fp|
588
- fp.puts "#!/usr/bin/ruby"
589
- end
590
-
591
- install_gem a
592
-
593
- gem_exec = File.join @gemhome, "bin", "foo"
594
- gem_bindir = File.join @tempdir, "test_bin", "foo"
595
-
596
- FileUtils.rm gem_exec
597
- FileUtils.rm gem_bindir
598
-
599
- @cmd.handle_options ["--all", "--only-executables", "--bindir", "#{gem_bindir}"]
600
-
601
- use_ui @ui do
602
- @cmd.execute
603
- end
604
-
605
- refute File.exist? gem_exec
606
- assert File.exist? gem_bindir
607
- end
608
-
609
- def test_execute_unknown_gem_at_remote_source
610
- install_specs util_spec "a"
611
-
612
- @cmd.options[:args] = %w[a]
613
-
614
- use_ui @ui do
615
- @cmd.execute
616
- end
617
-
618
- assert_equal([
619
- "Restoring gems to pristine condition...",
620
- "Cached gem for a-2 not found, attempting to fetch...",
621
- "Skipped a-2, it was not found from cache and remote sources",
622
- ], @ui.output.split("\n"))
623
-
624
- assert_empty @ui.error
625
- end
626
-
627
- def test_execute_default_gem
628
- default_gem_spec = new_default_spec("default", "2.0.0.0",
629
- nil, "default/gem.rb")
630
- install_default_gems(default_gem_spec)
631
-
632
- @cmd.options[:args] = %w[default]
633
-
634
- use_ui @ui do
635
- @cmd.execute
636
- end
637
-
638
- assert_equal(
639
- [
640
- "Restoring gems to pristine condition...",
641
- "Skipped default-2.0.0.0, it is a default gem",
642
- ],
643
- @ui.output.split("\n")
644
- )
645
- assert_empty(@ui.error)
646
- end
647
-
648
- def test_execute_multi_platform
649
- a = util_spec "a" do |s|
650
- s.extensions << "ext/a/extconf.rb"
651
- end
652
-
653
- b = util_spec "b" do |s|
654
- s.extensions << "ext/a/extconf.rb"
655
- s.platform = Gem::Platform.new("java")
656
- end
657
-
658
- ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
659
- write_file ext_path do |io|
660
- io.write <<-'RUBY'
661
- File.open "Makefile", "w" do |f|
662
- f.puts "clean:\n\techo cleaned\n"
663
- f.puts "all:\n\techo built\n"
664
- f.puts "install:\n\techo installed\n"
665
- end
666
- RUBY
667
- end
668
-
669
- install_gem a
670
- install_gem b
671
-
672
- @cmd.options[:extensions] = true
673
- @cmd.options[:extensions_set] = true
674
- @cmd.options[:args] = []
675
-
676
- util_set_arch "x86_64-darwin" do
677
- use_ui @ui do
678
- @cmd.execute
679
- end
680
- end
681
-
682
- out = @ui.output.split "\n"
683
-
684
- assert_equal "Restoring gems to pristine condition...", out.shift
685
- assert_equal "Building native extensions. This could take a while...",
686
- out.shift
687
- assert_equal "Restored #{a.full_name}", out.shift
688
- assert_empty out, out.inspect
689
- end
690
-
691
- def test_handle_options
692
- @cmd.handle_options %w[]
693
-
694
- refute @cmd.options[:all]
695
-
696
- assert @cmd.options[:extensions]
697
- refute @cmd.options[:extensions_set]
698
-
699
- assert_equal Gem::Requirement.default, @cmd.options[:version]
700
- end
701
-
702
- def test_handle_options_extensions
703
- @cmd.handle_options %w[--extensions]
704
-
705
- assert @cmd.options[:extensions]
706
- assert @cmd.options[:extensions_set]
707
- end
708
- end