rubygems-update 3.3.18 → 3.4.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (615) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1429 -1064
  3. data/CONTRIBUTING.md +31 -8
  4. data/Manifest.txt +61 -36
  5. data/POLICIES.md +55 -20
  6. data/README.md +19 -6
  7. data/bundler/CHANGELOG.md +457 -1
  8. data/bundler/README.md +3 -6
  9. data/bundler/UPGRADING.md +11 -4
  10. data/bundler/bundler.gemspec +8 -10
  11. data/bundler/exe/bundle +5 -16
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/add.rb +1 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +2 -0
  17. data/bundler/lib/bundler/cli/console.rb +2 -2
  18. data/bundler/lib/bundler/cli/doctor.rb +4 -6
  19. data/bundler/lib/bundler/cli/gem.rb +62 -40
  20. data/bundler/lib/bundler/cli/info.rb +1 -1
  21. data/bundler/lib/bundler/cli/init.rb +6 -2
  22. data/bundler/lib/bundler/cli/install.rb +8 -6
  23. data/bundler/lib/bundler/cli/lock.rb +8 -5
  24. data/bundler/lib/bundler/cli/open.rb +6 -4
  25. data/bundler/lib/bundler/cli/outdated.rb +14 -7
  26. data/bundler/lib/bundler/cli/platform.rb +7 -5
  27. data/bundler/lib/bundler/cli/viz.rb +1 -1
  28. data/bundler/lib/bundler/cli.rb +53 -7
  29. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  30. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  31. data/bundler/lib/bundler/constants.rb +1 -1
  32. data/bundler/lib/bundler/current_ruby.rb +16 -5
  33. data/bundler/lib/bundler/definition.rb +262 -133
  34. data/bundler/lib/bundler/dependency.rb +20 -86
  35. data/bundler/lib/bundler/digest.rb +1 -1
  36. data/bundler/lib/bundler/dsl.rb +6 -7
  37. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  38. data/bundler/lib/bundler/env.rb +2 -2
  39. data/bundler/lib/bundler/environment_preserver.rb +3 -2
  40. data/bundler/lib/bundler/errors.rb +1 -11
  41. data/bundler/lib/bundler/feature_flag.rb +0 -2
  42. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
  43. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  44. data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
  45. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  46. data/bundler/lib/bundler/fetcher.rb +21 -15
  47. data/bundler/lib/bundler/force_platform.rb +18 -0
  48. data/bundler/lib/bundler/friendly_errors.rb +1 -4
  49. data/bundler/lib/bundler/gem_helper.rb +3 -4
  50. data/bundler/lib/bundler/gem_helpers.rb +7 -2
  51. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  52. data/bundler/lib/bundler/graph.rb +3 -3
  53. data/bundler/lib/bundler/index.rb +13 -47
  54. data/bundler/lib/bundler/injector.rb +5 -4
  55. data/bundler/lib/bundler/inline.rb +9 -11
  56. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
  57. data/bundler/lib/bundler/installer/standalone.rb +13 -9
  58. data/bundler/lib/bundler/installer.rb +17 -29
  59. data/bundler/lib/bundler/lazy_specification.rb +54 -53
  60. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  61. data/bundler/lib/bundler/lockfile_parser.rb +17 -16
  62. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  63. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  64. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
  66. data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
  67. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  69. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  70. data/bundler/lib/bundler/man/bundle-config.1 +26 -10
  71. data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
  72. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  73. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  74. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  76. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  77. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  78. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  79. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  80. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  81. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  82. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  83. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  84. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  85. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  86. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  87. data/bundler/lib/bundler/man/bundle-install.1 +5 -30
  88. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
  89. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  90. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  91. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  92. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  94. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  95. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  96. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  97. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  98. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  99. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  102. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  103. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  104. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  105. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  106. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  107. data/bundler/lib/bundler/man/bundle.1 +15 -10
  108. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  109. data/bundler/lib/bundler/man/gemfile.5 +55 -55
  110. data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
  111. data/bundler/lib/bundler/man/index.txt +4 -0
  112. data/bundler/lib/bundler/match_metadata.rb +13 -0
  113. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  114. data/bundler/lib/bundler/mirror.rb +5 -7
  115. data/bundler/lib/bundler/plugin/index.rb +5 -5
  116. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  117. data/bundler/lib/bundler/plugin/installer.rb +5 -2
  118. data/bundler/lib/bundler/plugin.rb +3 -1
  119. data/bundler/lib/bundler/remote_specification.rb +7 -12
  120. data/bundler/lib/bundler/resolver/base.rb +107 -0
  121. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  122. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  123. data/bundler/lib/bundler/resolver/package.rb +72 -0
  124. data/bundler/lib/bundler/resolver/root.rb +25 -0
  125. data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
  126. data/bundler/lib/bundler/resolver.rb +335 -328
  127. data/bundler/lib/bundler/ruby_dsl.rb +7 -1
  128. data/bundler/lib/bundler/ruby_version.rb +8 -8
  129. data/bundler/lib/bundler/rubygems_ext.rb +100 -9
  130. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
  131. data/bundler/lib/bundler/rubygems_integration.rb +11 -15
  132. data/bundler/lib/bundler/runtime.rb +2 -6
  133. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  134. data/bundler/lib/bundler/settings.rb +5 -11
  135. data/bundler/lib/bundler/setup.rb +4 -1
  136. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  137. data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
  138. data/bundler/lib/bundler/source/git.rb +55 -30
  139. data/bundler/lib/bundler/source/metadata.rb +1 -2
  140. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  141. data/bundler/lib/bundler/source/path.rb +6 -6
  142. data/bundler/lib/bundler/source/rubygems.rb +26 -81
  143. data/bundler/lib/bundler/source.rb +1 -1
  144. data/bundler/lib/bundler/source_list.rb +8 -2
  145. data/bundler/lib/bundler/spec_set.rb +60 -37
  146. data/bundler/lib/bundler/templates/Executable +1 -1
  147. data/bundler/lib/bundler/templates/Executable.bundler +5 -10
  148. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  149. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  150. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  151. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  152. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  153. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  154. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  155. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  156. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  157. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  158. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  159. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  160. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  161. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  162. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  163. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
  164. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  165. data/bundler/lib/bundler/ui/shell.rb +35 -12
  166. data/bundler/lib/bundler/ui/silent.rb +21 -5
  167. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  168. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  169. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  170. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  171. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
  172. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  173. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  174. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  175. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  176. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  177. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  178. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  184. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  185. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  186. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  187. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  188. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  189. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  190. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  192. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  193. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  194. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  195. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  196. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  197. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  207. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  208. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  209. data/bundler/lib/bundler/version.rb +5 -1
  210. data/bundler/lib/bundler/worker.rb +5 -7
  211. data/bundler/lib/bundler.rb +25 -77
  212. data/{bin → exe}/gem +4 -5
  213. data/{bin → exe}/update_rubygems +12 -10
  214. data/lib/rubygems/available_set.rb +4 -3
  215. data/lib/rubygems/basic_specification.rb +5 -4
  216. data/lib/rubygems/bundler_version_finder.rb +2 -2
  217. data/lib/rubygems/command.rb +41 -32
  218. data/lib/rubygems/command_manager.rb +30 -15
  219. data/lib/rubygems/commands/build_command.rb +12 -8
  220. data/lib/rubygems/commands/cert_command.rb +34 -33
  221. data/lib/rubygems/commands/check_command.rb +21 -20
  222. data/lib/rubygems/commands/cleanup_command.rb +18 -17
  223. data/lib/rubygems/commands/contents_command.rb +14 -13
  224. data/lib/rubygems/commands/dependency_command.rb +17 -16
  225. data/lib/rubygems/commands/environment_command.rb +6 -5
  226. data/lib/rubygems/commands/exec_command.rb +249 -0
  227. data/lib/rubygems/commands/fetch_command.rb +10 -9
  228. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  229. data/lib/rubygems/commands/help_command.rb +7 -6
  230. data/lib/rubygems/commands/info_command.rb +3 -3
  231. data/lib/rubygems/commands/install_command.rb +28 -23
  232. data/lib/rubygems/commands/list_command.rb +4 -3
  233. data/lib/rubygems/commands/lock_command.rb +5 -4
  234. data/lib/rubygems/commands/mirror_command.rb +4 -3
  235. data/lib/rubygems/commands/open_command.rb +10 -9
  236. data/lib/rubygems/commands/outdated_command.rb +6 -5
  237. data/lib/rubygems/commands/owner_command.rb +17 -14
  238. data/lib/rubygems/commands/pristine_command.rb +46 -36
  239. data/lib/rubygems/commands/push_command.rb +9 -8
  240. data/lib/rubygems/commands/query_command.rb +9 -8
  241. data/lib/rubygems/commands/rdoc_command.rb +21 -19
  242. data/lib/rubygems/commands/search_command.rb +4 -3
  243. data/lib/rubygems/commands/server_command.rb +4 -3
  244. data/lib/rubygems/commands/setup_command.rb +97 -106
  245. data/lib/rubygems/commands/signin_command.rb +10 -9
  246. data/lib/rubygems/commands/signout_command.rb +8 -7
  247. data/lib/rubygems/commands/sources_command.rb +22 -21
  248. data/lib/rubygems/commands/specification_command.rb +14 -13
  249. data/lib/rubygems/commands/stale_command.rb +3 -2
  250. data/lib/rubygems/commands/uninstall_command.rb +44 -40
  251. data/lib/rubygems/commands/unpack_command.rb +14 -13
  252. data/lib/rubygems/commands/update_command.rb +42 -63
  253. data/lib/rubygems/commands/which_command.rb +8 -7
  254. data/lib/rubygems/commands/yank_command.rb +12 -11
  255. data/lib/rubygems/config_file.rb +55 -21
  256. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  257. data/lib/rubygems/core_ext/kernel_require.rb +109 -115
  258. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  259. data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
  260. data/lib/rubygems/defaults.rb +33 -18
  261. data/lib/rubygems/dependency.rb +15 -11
  262. data/lib/rubygems/dependency_installer.rb +38 -37
  263. data/lib/rubygems/dependency_list.rb +7 -6
  264. data/lib/rubygems/deprecate.rb +3 -2
  265. data/lib/rubygems/doctor.rb +19 -18
  266. data/lib/rubygems/errors.rb +3 -2
  267. data/lib/rubygems/exceptions.rb +16 -8
  268. data/lib/rubygems/ext/build_error.rb +2 -1
  269. data/lib/rubygems/ext/builder.rb +37 -21
  270. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  271. data/lib/rubygems/ext/cargo_builder.rb +150 -111
  272. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  273. data/lib/rubygems/ext/configure_builder.rb +2 -1
  274. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  275. data/lib/rubygems/ext/rake_builder.rb +7 -5
  276. data/lib/rubygems/ext.rb +8 -7
  277. data/lib/rubygems/gem_runner.rb +6 -5
  278. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  279. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  280. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  281. data/lib/rubygems/gemcutter_utilities.rb +90 -34
  282. data/lib/rubygems/indexer.rb +29 -28
  283. data/lib/rubygems/install_default_message.rb +3 -2
  284. data/lib/rubygems/install_message.rb +3 -2
  285. data/lib/rubygems/install_update_options.rb +56 -55
  286. data/lib/rubygems/installer.rb +54 -46
  287. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  288. data/lib/rubygems/local_remote_options.rb +19 -20
  289. data/lib/rubygems/mock_gem_ui.rb +3 -2
  290. data/lib/rubygems/name_tuple.rb +5 -4
  291. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  292. data/lib/rubygems/optparse.rb +1 -1
  293. data/lib/rubygems/package/digest_io.rb +1 -0
  294. data/lib/rubygems/package/file_source.rb +3 -2
  295. data/lib/rubygems/package/io_source.rb +1 -0
  296. data/lib/rubygems/package/old.rb +9 -8
  297. data/lib/rubygems/package/source.rb +1 -0
  298. data/lib/rubygems/package/tar_header.rb +63 -62
  299. data/lib/rubygems/package/tar_reader/entry.rb +91 -9
  300. data/lib/rubygems/package/tar_reader.rb +2 -29
  301. data/lib/rubygems/package/tar_writer.rb +8 -7
  302. data/lib/rubygems/package.rb +64 -48
  303. data/lib/rubygems/package_task.rb +5 -4
  304. data/lib/rubygems/path_support.rb +1 -0
  305. data/lib/rubygems/platform.rb +79 -53
  306. data/lib/rubygems/psych_tree.rb +2 -1
  307. data/lib/rubygems/query_utils.rb +35 -35
  308. data/lib/rubygems/rdoc.rb +3 -2
  309. data/lib/rubygems/remote_fetcher.rb +23 -22
  310. data/lib/rubygems/request/connection_pools.rb +4 -4
  311. data/lib/rubygems/request/http_pool.rb +2 -1
  312. data/lib/rubygems/request/https_pool.rb +1 -0
  313. data/lib/rubygems/request.rb +23 -22
  314. data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
  315. data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
  316. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
  317. data/lib/rubygems/request_set/lockfile.rb +6 -5
  318. data/lib/rubygems/request_set.rb +20 -19
  319. data/lib/rubygems/requirement.rb +15 -14
  320. data/lib/rubygems/resolver/activation_request.rb +4 -3
  321. data/lib/rubygems/resolver/api_set.rb +5 -4
  322. data/lib/rubygems/resolver/api_specification.rb +7 -6
  323. data/lib/rubygems/resolver/best_set.rb +6 -5
  324. data/lib/rubygems/resolver/composed_set.rb +1 -0
  325. data/lib/rubygems/resolver/conflict.rb +11 -10
  326. data/lib/rubygems/resolver/current_set.rb +1 -0
  327. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  328. data/lib/rubygems/resolver/git_set.rb +3 -2
  329. data/lib/rubygems/resolver/git_specification.rb +7 -6
  330. data/lib/rubygems/resolver/index_set.rb +4 -3
  331. data/lib/rubygems/resolver/index_specification.rb +7 -5
  332. data/lib/rubygems/resolver/installed_specification.rb +5 -4
  333. data/lib/rubygems/resolver/installer_set.rb +15 -17
  334. data/lib/rubygems/resolver/local_specification.rb +3 -2
  335. data/lib/rubygems/resolver/lock_set.rb +5 -4
  336. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  340. data/lib/rubygems/resolver/molinillo.rb +2 -1
  341. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  342. data/lib/rubygems/resolver/set.rb +1 -0
  343. data/lib/rubygems/resolver/source_set.rb +2 -0
  344. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  345. data/lib/rubygems/resolver/specification.rb +2 -1
  346. data/lib/rubygems/resolver/stats.rb +2 -1
  347. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  348. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  349. data/lib/rubygems/resolver.rb +41 -40
  350. data/lib/rubygems/s3_uri_signer.rb +10 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -2
  352. data/lib/rubygems/security/policies.rb +48 -47
  353. data/lib/rubygems/security/policy.rb +19 -18
  354. data/lib/rubygems/security/signer.rb +6 -5
  355. data/lib/rubygems/security/trust_dir.rb +5 -4
  356. data/lib/rubygems/security.rb +30 -42
  357. data/lib/rubygems/security_option.rb +6 -5
  358. data/lib/rubygems/shellwords.rb +3 -0
  359. data/lib/rubygems/source/git.rb +22 -22
  360. data/lib/rubygems/source/installed.rb +2 -1
  361. data/lib/rubygems/source/local.rb +3 -2
  362. data/lib/rubygems/source/lock.rb +1 -0
  363. data/lib/rubygems/source/specific_file.rb +2 -1
  364. data/lib/rubygems/source/vendor.rb +1 -0
  365. data/lib/rubygems/source.rb +16 -16
  366. data/lib/rubygems/spec_fetcher.rb +10 -9
  367. data/lib/rubygems/specification.rb +121 -114
  368. data/lib/rubygems/specification_policy.rb +36 -15
  369. data/lib/rubygems/stub_specification.rb +11 -9
  370. data/lib/rubygems/text.rb +2 -2
  371. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  372. data/lib/rubygems/tsort.rb +1 -1
  373. data/lib/rubygems/uninstaller.rb +19 -18
  374. data/lib/rubygems/update_suggestion.rb +69 -0
  375. data/lib/rubygems/uri.rb +4 -4
  376. data/lib/rubygems/uri_formatter.rb +1 -1
  377. data/lib/rubygems/user_interaction.rb +37 -21
  378. data/lib/rubygems/util/licenses.rb +4 -3
  379. data/lib/rubygems/util/list.rb +1 -0
  380. data/lib/rubygems/util.rb +12 -15
  381. data/lib/rubygems/validator.rb +7 -6
  382. data/lib/rubygems/version.rb +17 -11
  383. data/lib/rubygems/version_option.rb +4 -3
  384. data/lib/rubygems.rb +89 -68
  385. data/rubygems-update.gemspec +10 -8
  386. data/setup.rb +10 -9
  387. data/test/rubygems/alternate_cert.pem +14 -14
  388. data/test/rubygems/alternate_cert_32.pem +15 -15
  389. data/test/rubygems/alternate_key.pem +25 -25
  390. data/test/rubygems/bad_rake.rb +1 -0
  391. data/test/rubygems/bundler_test_gem.rb +421 -0
  392. data/test/rubygems/child_cert.pem +15 -16
  393. data/test/rubygems/child_cert_32.pem +15 -16
  394. data/test/rubygems/child_key.pem +25 -25
  395. data/test/rubygems/encrypted_private_key.pem +26 -26
  396. data/test/rubygems/expired_cert.pem +15 -15
  397. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  398. data/test/rubygems/future_cert.pem +15 -15
  399. data/test/rubygems/future_cert_32.pem +15 -15
  400. data/test/rubygems/good_rake.rb +1 -0
  401. data/test/rubygems/grandchild_cert.pem +15 -16
  402. data/test/rubygems/grandchild_cert_32.pem +15 -16
  403. data/test/rubygems/grandchild_key.pem +25 -25
  404. data/test/rubygems/helper.rb +172 -151
  405. data/test/rubygems/installer_test_case.rb +14 -13
  406. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  407. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  408. data/test/rubygems/invalid_key.pem +25 -25
  409. data/test/rubygems/invalid_signer_cert.pem +15 -15
  410. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  411. data/test/rubygems/invalidchild_cert.pem +15 -16
  412. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  413. data/test/rubygems/invalidchild_key.pem +25 -25
  414. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  415. data/test/rubygems/package/tar_test_case.rb +53 -17
  416. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  417. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  418. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  419. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  420. data/test/rubygems/private_key.pem +25 -25
  421. data/test/rubygems/public_cert.pem +16 -16
  422. data/test/rubygems/public_cert_32.pem +15 -15
  423. data/test/rubygems/public_key.pem +7 -7
  424. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  425. data/test/rubygems/rubygems_plugin.rb +3 -2
  426. data/test/rubygems/simple_gem.rb +2 -1
  427. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  428. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
  429. data/test/rubygems/test_bundled_ca.rb +13 -12
  430. data/test/rubygems/test_config.rb +5 -4
  431. data/test/rubygems/test_deprecate.rb +5 -4
  432. data/test/rubygems/test_exit.rb +9 -3
  433. data/test/rubygems/test_gem.rb +339 -677
  434. data/test/rubygems/test_gem_available_set.rb +22 -21
  435. data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
  436. data/test/rubygems/test_gem_command.rb +45 -44
  437. data/test/rubygems/test_gem_command_manager.rb +96 -30
  438. data/test/rubygems/test_gem_commands_build_command.rb +74 -63
  439. data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
  440. data/test/rubygems/test_gem_commands_check_command.rb +5 -4
  441. data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
  442. data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
  443. data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
  444. data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
  445. data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
  446. data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
  447. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
  448. data/test/rubygems/test_gem_commands_help_command.rb +14 -13
  449. data/test/rubygems/test_gem_commands_info_command.rb +29 -2
  450. data/test/rubygems/test_gem_commands_install_command.rb +152 -132
  451. data/test/rubygems/test_gem_commands_list_command.rb +5 -4
  452. data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
  453. data/test/rubygems/test_gem_commands_mirror.rb +3 -2
  454. data/test/rubygems/test_gem_commands_open_command.rb +5 -4
  455. data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
  456. data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
  457. data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
  458. data/test/rubygems/test_gem_commands_push_command.rb +189 -64
  459. data/test/rubygems/test_gem_commands_query_command.rb +74 -73
  460. data/test/rubygems/test_gem_commands_search_command.rb +3 -2
  461. data/test/rubygems/test_gem_commands_server_command.rb +3 -2
  462. data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
  463. data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
  464. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  465. data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
  466. data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
  467. data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
  468. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
  469. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
  470. data/test/rubygems/test_gem_commands_update_command.rb +96 -95
  471. data/test/rubygems/test_gem_commands_which_command.rb +7 -6
  472. data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
  473. data/test/rubygems/test_gem_config_file.rb +94 -81
  474. data/test/rubygems/test_gem_dependency.rb +76 -73
  475. data/test/rubygems/test_gem_dependency_installer.rb +200 -165
  476. data/test/rubygems/test_gem_dependency_list.rb +48 -47
  477. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
  478. data/test/rubygems/test_gem_doctor.rb +27 -26
  479. data/test/rubygems/test_gem_ext_builder.rb +60 -61
  480. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
  481. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
  482. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
  483. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
  484. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  485. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
  486. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  487. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  488. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  489. data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
  490. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
  491. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
  492. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
  493. data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
  494. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  495. data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
  496. data/test/rubygems/test_gem_gem_runner.rb +15 -9
  497. data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
  498. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
  499. data/test/rubygems/test_gem_indexer.rb +87 -67
  500. data/test/rubygems/test_gem_install_update_options.rb +17 -16
  501. data/test/rubygems/test_gem_installer.rb +422 -304
  502. data/test/rubygems/test_gem_local_remote_options.rb +11 -10
  503. data/test/rubygems/test_gem_name_tuple.rb +5 -4
  504. data/test/rubygems/test_gem_package.rb +243 -231
  505. data/test/rubygems/test_gem_package_old.rb +14 -13
  506. data/test/rubygems/test_gem_package_tar_header.rb +48 -47
  507. data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
  508. data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
  509. data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
  510. data/test/rubygems/test_gem_package_task.rb +19 -18
  511. data/test/rubygems/test_gem_path_support.rb +15 -14
  512. data/test/rubygems/test_gem_platform.rb +333 -227
  513. data/test/rubygems/test_gem_rdoc.rb +15 -14
  514. data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
  515. data/test/rubygems/test_gem_request.rb +64 -58
  516. data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
  517. data/test/rubygems/test_gem_request_set.rb +101 -100
  518. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
  519. data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
  520. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
  521. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
  522. data/test/rubygems/test_gem_requirement.rb +48 -41
  523. data/test/rubygems/test_gem_resolver.rb +167 -99
  524. data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
  525. data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
  526. data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
  527. data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
  528. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
  529. data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
  530. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
  531. data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
  532. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
  533. data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
  534. data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
  535. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
  536. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
  537. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
  538. data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
  539. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
  540. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
  541. data/test/rubygems/test_gem_resolver_specification.rb +9 -8
  542. data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
  543. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
  544. data/test/rubygems/test_gem_security.rb +69 -68
  545. data/test/rubygems/test_gem_security_policy.rb +72 -72
  546. data/test/rubygems/test_gem_security_signer.rb +35 -34
  547. data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
  548. data/test/rubygems/test_gem_silent_ui.rb +39 -32
  549. data/test/rubygems/test_gem_source.rb +45 -44
  550. data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
  551. data/test/rubygems/test_gem_source_git.rb +69 -62
  552. data/test/rubygems/test_gem_source_installed.rb +17 -16
  553. data/test/rubygems/test_gem_source_list.rb +6 -5
  554. data/test/rubygems/test_gem_source_local.rb +15 -14
  555. data/test/rubygems/test_gem_source_lock.rb +32 -31
  556. data/test/rubygems/test_gem_source_specific_file.rb +18 -17
  557. data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
  558. data/test/rubygems/test_gem_source_vendor.rb +14 -13
  559. data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
  560. data/test/rubygems/test_gem_specification.rb +533 -469
  561. data/test/rubygems/test_gem_stream_ui.rb +53 -22
  562. data/test/rubygems/test_gem_stub_specification.rb +33 -32
  563. data/test/rubygems/test_gem_text.rb +2 -1
  564. data/test/rubygems/test_gem_uninstaller.rb +118 -117
  565. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
  566. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  567. data/test/rubygems/test_gem_uri.rb +6 -4
  568. data/test/rubygems/test_gem_uri_formatter.rb +15 -14
  569. data/test/rubygems/test_gem_util.rb +24 -23
  570. data/test/rubygems/test_gem_validator.rb +8 -8
  571. data/test/rubygems/test_gem_version.rb +24 -16
  572. data/test/rubygems/test_gem_version_option.rb +16 -15
  573. data/test/rubygems/test_kernel.rb +43 -48
  574. data/test/rubygems/test_project_sanity.rb +32 -3
  575. data/test/rubygems/test_remote_fetch_error.rb +8 -7
  576. data/test/rubygems/test_require.rb +118 -103
  577. data/test/rubygems/test_rubygems.rb +10 -8
  578. data/test/rubygems/test_webauthn_listener.rb +143 -0
  579. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  580. data/test/rubygems/test_webauthn_poller.rb +124 -0
  581. data/test/rubygems/utilities.rb +98 -34
  582. data/test/rubygems/wrong_key_cert.pem +15 -15
  583. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  584. data/test/test_changelog_generator.rb +1 -1
  585. metadata +99 -46
  586. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  587. data/bundler/lib/bundler/templates/gems.rb +0 -5
  588. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  589. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  590. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  591. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  592. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  593. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  594. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  595. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  596. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  597. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  598. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  599. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  600. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  601. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  602. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  603. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  604. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  605. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  606. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  608. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  609. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  610. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  611. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  612. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  613. data/bundler/lib/bundler/version_ranges.rb +0 -122
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  615. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/commands/pristine_command'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/commands/pristine_command"
4
5
 
5
6
  class TestGemCommandsPristineCommand < Gem::TestCase
6
7
  def setup
@@ -11,29 +12,29 @@ class TestGemCommandsPristineCommand < Gem::TestCase
11
12
  end
12
13
 
13
14
  def test_execute
14
- a = util_spec 'a' do |s|
15
+ a = util_spec "a" do |s|
15
16
  s.executables = %w[foo]
16
17
  s.files = %w[bin/foo lib/a.rb]
17
18
  end
18
19
 
19
- write_file File.join(@tempdir, 'lib', 'a.rb') do |fp|
20
+ write_file File.join(@tempdir, "lib", "a.rb") do |fp|
20
21
  fp.puts "puts __FILE__"
21
22
  end
22
- write_file File.join(@tempdir, 'bin', 'foo') do |fp|
23
+ write_file File.join(@tempdir, "bin", "foo") do |fp|
23
24
  fp.puts "#!/usr/bin/ruby"
24
25
  end
25
26
 
26
27
  install_gem a
27
28
 
28
- foo_path = File.join @gemhome, 'gems', a.full_name, 'bin', 'foo'
29
- a_rb_path = File.join @gemhome, 'gems', a.full_name, 'lib', 'a.rb'
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"
30
31
 
31
32
  write_file foo_path do |io|
32
- io.puts 'I changed it!'
33
+ io.puts "I changed it!"
33
34
  end
34
35
 
35
36
  write_file a_rb_path do |io|
36
- io.puts 'I changed it!'
37
+ io.puts "I changed it!"
37
38
  end
38
39
 
39
40
  @cmd.options[:args] = %w[a]
@@ -102,18 +103,18 @@ class TestGemCommandsPristineCommand < Gem::TestCase
102
103
  end
103
104
 
104
105
  def test_execute_all
105
- a = util_spec 'a' do |s|
106
+ a = util_spec "a" do |s|
106
107
  s.executables = %w[foo]
107
108
  end
108
109
 
109
- write_file File.join(@tempdir, 'bin', 'foo') do |fp|
110
+ write_file File.join(@tempdir, "bin", "foo") do |fp|
110
111
  fp.puts "#!/usr/bin/ruby"
111
112
  end
112
113
 
113
114
  install_gem a
114
115
 
115
- gem_bin = File.join @gemhome, 'gems', a.full_name, 'bin', 'foo'
116
- gem_stub = File.join @gemhome, 'bin', 'foo'
116
+ gem_bin = File.join @gemhome, "gems", a.full_name, "bin", "foo"
117
+ gem_stub = File.join @gemhome, "bin", "foo"
117
118
 
118
119
  FileUtils.rm gem_bin
119
120
  FileUtils.rm gem_stub
@@ -135,17 +136,17 @@ class TestGemCommandsPristineCommand < Gem::TestCase
135
136
  end
136
137
 
137
138
  def test_execute_env_shebang
138
- a = util_spec 'a' do |s|
139
+ a = util_spec "a" do |s|
139
140
  s.executables = %w[foo]
140
141
  s.files = %w[bin/foo]
141
142
  end
142
- write_file File.join(@tempdir, 'bin', 'foo') do |fp|
143
+ write_file File.join(@tempdir, "bin", "foo") do |fp|
143
144
  fp.puts "#!/usr/bin/ruby"
144
145
  end
145
146
 
146
147
  install_gem a
147
148
 
148
- gem_exec = File.join @gemhome, 'bin', 'foo'
149
+ gem_exec = File.join @gemhome, "bin", "foo"
149
150
 
150
151
  FileUtils.rm gem_exec
151
152
 
@@ -157,7 +158,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
157
158
 
158
159
  assert_path_exist gem_exec
159
160
 
160
- ruby_exec = sprintf Gem.default_exec_format, 'ruby'
161
+ ruby_exec = sprintf Gem.default_exec_format, "ruby"
161
162
 
162
163
  bin_env = win_platform? ? "" : %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) } + " "
163
164
 
@@ -165,11 +166,11 @@ class TestGemCommandsPristineCommand < Gem::TestCase
165
166
  end
166
167
 
167
168
  def test_execute_extensions_explicit
168
- a = util_spec 'a' do |s|
169
- s.extensions << 'ext/a/extconf.rb'
169
+ a = util_spec "a" do |s|
170
+ s.extensions << "ext/a/extconf.rb"
170
171
  end
171
172
 
172
- ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb'
173
+ ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
173
174
  write_file ext_path do |io|
174
175
  io.write <<-'RUBY'
175
176
  File.open "Makefile", "w" do |f|
@@ -180,7 +181,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
180
181
  RUBY
181
182
  end
182
183
 
183
- b = util_spec 'b'
184
+ b = util_spec "b"
184
185
 
185
186
  install_gem a
186
187
  install_gem b
@@ -195,19 +196,67 @@ class TestGemCommandsPristineCommand < Gem::TestCase
195
196
 
196
197
  out = @ui.output.split "\n"
197
198
 
198
- assert_equal 'Restoring gems to pristine condition...', out.shift
199
- assert_equal 'Building native extensions. This could take a while...',
199
+ assert_equal "Restoring gems to pristine condition...", out.shift
200
+ assert_equal "Building native extensions. This could take a while...",
200
201
  out.shift
201
202
  assert_equal "Restored #{a.full_name}", out.shift
202
203
  assert_empty out, out.inspect
203
204
  end
204
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
+
205
254
  def test_execute_no_extension
206
- a = util_spec 'a' do |s|
207
- s.extensions << 'ext/a/extconf.rb'
255
+ a = util_spec "a" do |s|
256
+ s.extensions << "ext/a/extconf.rb"
208
257
  end
209
258
 
210
- ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb'
259
+ ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
211
260
  write_file ext_path do |io|
212
261
  io.write "# extconf.rb\nrequire 'mkmf'; create_makefile 'a'"
213
262
  end
@@ -223,18 +272,18 @@ class TestGemCommandsPristineCommand < Gem::TestCase
223
272
 
224
273
  out = @ui.output.split "\n"
225
274
 
226
- assert_equal 'Restoring gems to pristine condition...', out.shift
275
+ assert_equal "Restoring gems to pristine condition...", out.shift
227
276
  assert_equal "Skipped #{a.full_name}, it needs to compile an extension",
228
277
  out.shift
229
278
  assert_empty out, out.inspect
230
279
  end
231
280
 
232
281
  def test_execute_with_extension_with_build_args
233
- a = util_spec 'a' do |s|
234
- s.extensions << 'ext/a/extconf.rb'
282
+ a = util_spec "a" do |s|
283
+ s.extensions << "ext/a/extconf.rb"
235
284
  end
236
285
 
237
- ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb'
286
+ ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
238
287
  write_file ext_path do |io|
239
288
  io.write <<-'RUBY'
240
289
  File.open "Makefile", "w" do |f|
@@ -257,7 +306,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
257
306
 
258
307
  out = @ui.output.split "\n"
259
308
 
260
- assert_equal 'Restoring gems to pristine condition...', out.shift
309
+ assert_equal "Restoring gems to pristine condition...", out.shift
261
310
  assert_equal "Building native extensions with: '--with-awesome=true --sweet'", out.shift
262
311
  assert_equal "This could take a while...", out.shift
263
312
  assert_equal "Restored #{a.full_name}", out.shift
@@ -265,8 +314,8 @@ class TestGemCommandsPristineCommand < Gem::TestCase
265
314
  end
266
315
 
267
316
  def test_execute_many
268
- a = util_spec 'a'
269
- b = util_spec 'b'
317
+ a = util_spec "a"
318
+ b = util_spec "b"
270
319
 
271
320
  install_gem a
272
321
  install_gem b
@@ -286,14 +335,14 @@ class TestGemCommandsPristineCommand < Gem::TestCase
286
335
  end
287
336
 
288
337
  def test_skip
289
- a = util_spec 'a'
290
- b = util_spec 'b'
338
+ a = util_spec "a"
339
+ b = util_spec "b"
291
340
 
292
341
  install_gem a
293
342
  install_gem b
294
343
 
295
344
  @cmd.options[:args] = %w[a b]
296
- @cmd.options[:skip] = 'a'
345
+ @cmd.options[:skip] = "a"
297
346
 
298
347
  use_ui @ui do
299
348
  @cmd.execute
@@ -308,16 +357,16 @@ class TestGemCommandsPristineCommand < Gem::TestCase
308
357
  end
309
358
 
310
359
  def test_skip_many_gems
311
- a = util_spec 'a'
312
- b = util_spec 'b'
313
- c = util_spec 'c'
360
+ a = util_spec "a"
361
+ b = util_spec "b"
362
+ c = util_spec "c"
314
363
 
315
364
  install_gem a
316
365
  install_gem b
317
366
  install_gem c
318
367
 
319
368
  @cmd.options[:args] = %w[a b c]
320
- @cmd.options[:skip] = ['a', 'c']
369
+ @cmd.options[:skip] = ["a", "c"]
321
370
 
322
371
  use_ui @ui do
323
372
  @cmd.execute
@@ -333,14 +382,14 @@ class TestGemCommandsPristineCommand < Gem::TestCase
333
382
  end
334
383
 
335
384
  def test_execute_many_multi_repo
336
- a = util_spec 'a'
385
+ a = util_spec "a"
337
386
  install_gem a
338
387
 
339
388
  Gem.clear_paths
340
- gemhome2 = File.join @tempdir, 'gemhome2'
389
+ gemhome2 = File.join @tempdir, "gemhome2"
341
390
  Gem.use_paths gemhome2, [gemhome2, @gemhome]
342
391
 
343
- b = util_spec 'b'
392
+ b = util_spec "b"
344
393
  install_gem b
345
394
 
346
395
  @cmd.options[:args] = %w[a b]
@@ -356,21 +405,21 @@ class TestGemCommandsPristineCommand < Gem::TestCase
356
405
  assert_equal "Restored #{b.full_name}", out.shift
357
406
  assert_empty out, out.inspect
358
407
 
359
- assert_path_exist File.join(@gemhome, "gems", 'a-2')
360
- assert_path_not_exist File.join(gemhome2, "gems", 'a-2')
361
- assert_path_exist File.join(gemhome2, "gems", 'b-2')
362
- assert_path_not_exist File.join(@gemhome, "gems", 'b-2')
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")
363
412
  end
364
413
 
365
414
  def test_execute_missing_cache_gem
366
415
  specs = spec_fetcher do |fetcher|
367
- fetcher.gem 'a', 1
368
- fetcher.gem 'a', 2
369
- fetcher.gem 'a', 3
370
- fetcher.gem 'a', '3.a'
416
+ fetcher.gem "a", 1
417
+ fetcher.gem "a", 2
418
+ fetcher.gem "a", 3
419
+ fetcher.gem "a", "3.a"
371
420
  end
372
421
 
373
- FileUtils.rm specs['a-2'].cache_file
422
+ FileUtils.rm specs["a-2"].cache_file
374
423
 
375
424
  @cmd.options[:args] = %w[a]
376
425
 
@@ -396,22 +445,22 @@ class TestGemCommandsPristineCommand < Gem::TestCase
396
445
 
397
446
  def test_execute_missing_cache_gem_when_multi_repo
398
447
  specs = spec_fetcher do |fetcher|
399
- fetcher.gem 'a', 1
400
- fetcher.gem 'b', 1
448
+ fetcher.gem "a", 1
449
+ fetcher.gem "b", 1
401
450
  end
402
451
 
403
- FileUtils.rm_rf File.join(@gemhome, 'gems', 'a-1')
404
- FileUtils.rm_rf File.join(@gemhome, 'gems', 'b-1')
452
+ FileUtils.rm_rf File.join(@gemhome, "gems", "a-1")
453
+ FileUtils.rm_rf File.join(@gemhome, "gems", "b-1")
405
454
 
406
455
  install_gem specs["a-1"]
407
- FileUtils.rm File.join(@gemhome, 'cache', 'a-1.gem')
456
+ FileUtils.rm File.join(@gemhome, "cache", "a-1.gem")
408
457
 
409
458
  Gem.clear_paths
410
- gemhome2 = File.join(@tempdir, 'gemhome2')
459
+ gemhome2 = File.join(@tempdir, "gemhome2")
411
460
  Gem.use_paths gemhome2, [gemhome2, @gemhome]
412
461
 
413
462
  install_gem specs["b-1"]
414
- FileUtils.rm File.join(gemhome2, 'cache', 'b-1.gem')
463
+ FileUtils.rm File.join(gemhome2, "cache", "b-1.gem")
415
464
  Gem::Specification.reset
416
465
 
417
466
  @cmd.options[:args] = %w[a b]
@@ -435,15 +484,15 @@ class TestGemCommandsPristineCommand < Gem::TestCase
435
484
  assert_empty out, out.inspect
436
485
  assert_empty @ui.error
437
486
 
438
- assert_path_exist File.join(@gemhome, "cache", 'a-1.gem')
439
- assert_path_not_exist File.join(gemhome2, "cache", 'a-2.gem')
440
- assert_path_exist File.join(@gemhome, "gems", 'a-1')
441
- assert_path_not_exist File.join(gemhome2, "gems", 'a-1')
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")
442
491
 
443
- assert_path_exist File.join(gemhome2, "cache", 'b-1.gem')
444
- assert_path_not_exist File.join(@gemhome, "cache", 'b-2.gem')
445
- assert_path_exist File.join(gemhome2, "gems", 'b-1')
446
- assert_path_not_exist File.join(@gemhome, "gems", 'b-1')
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")
447
496
  end
448
497
 
449
498
  def test_execute_no_gem
@@ -459,21 +508,21 @@ class TestGemCommandsPristineCommand < Gem::TestCase
459
508
  end
460
509
 
461
510
  def test_execute_only_executables
462
- a = util_spec 'a' do |s|
511
+ a = util_spec "a" do |s|
463
512
  s.executables = %w[foo]
464
513
  s.files = %w[bin/foo lib/a.rb]
465
514
  end
466
- write_file File.join(@tempdir, 'lib', 'a.rb') do |fp|
515
+ write_file File.join(@tempdir, "lib", "a.rb") do |fp|
467
516
  fp.puts "puts __FILE__"
468
517
  end
469
- write_file File.join(@tempdir, 'bin', 'foo') do |fp|
518
+ write_file File.join(@tempdir, "bin", "foo") do |fp|
470
519
  fp.puts "#!/usr/bin/ruby"
471
520
  end
472
521
 
473
522
  install_gem a
474
523
 
475
- gem_lib = File.join @gemhome, 'gems', a.full_name, 'lib', 'a.rb'
476
- gem_exec = File.join @gemhome, 'bin', 'foo'
524
+ gem_lib = File.join @gemhome, "gems", a.full_name, "lib", "a.rb"
525
+ gem_exec = File.join @gemhome, "bin", "foo"
477
526
 
478
527
  FileUtils.rm gem_exec
479
528
  FileUtils.rm gem_lib
@@ -489,25 +538,25 @@ class TestGemCommandsPristineCommand < Gem::TestCase
489
538
  end
490
539
 
491
540
  def test_execute_only_plugins
492
- a = util_spec 'a' do |s|
541
+ a = util_spec "a" do |s|
493
542
  s.executables = %w[foo]
494
543
  s.files = %w[bin/foo lib/a.rb lib/rubygems_plugin.rb]
495
544
  end
496
- write_file File.join(@tempdir, 'lib', 'a.rb') do |fp|
545
+ write_file File.join(@tempdir, "lib", "a.rb") do |fp|
497
546
  fp.puts "puts __FILE__"
498
547
  end
499
- write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |fp|
500
- fp.puts "puts __FILE__"
548
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |fp|
549
+ fp.puts "# do nothing"
501
550
  end
502
- write_file File.join(@tempdir, 'bin', 'foo') do |fp|
551
+ write_file File.join(@tempdir, "bin", "foo") do |fp|
503
552
  fp.puts "#!/usr/bin/ruby"
504
553
  end
505
554
 
506
555
  install_gem a
507
556
 
508
- gem_lib = File.join @gemhome, 'gems', a.full_name, 'lib', 'a.rb'
509
- gem_plugin = File.join @gemhome, 'plugins', 'a_plugin.rb'
510
- gem_exec = File.join @gemhome, 'bin', 'foo'
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"
511
560
 
512
561
  FileUtils.rm gem_exec
513
562
  FileUtils.rm gem_plugin
@@ -525,24 +574,24 @@ class TestGemCommandsPristineCommand < Gem::TestCase
525
574
  end
526
575
 
527
576
  def test_execute_bindir
528
- a = util_spec 'a' do |s|
577
+ a = util_spec "a" do |s|
529
578
  s.name = "test_gem"
530
579
  s.executables = %w[foo]
531
580
  s.files = %w[bin/foo]
532
581
  end
533
582
 
534
- write_file File.join(@tempdir, 'bin', 'foo') do |fp|
583
+ write_file File.join(@tempdir, "bin", "foo") do |fp|
535
584
  fp.puts "#!/usr/bin/ruby"
536
585
  end
537
586
 
538
- write_file File.join(@tempdir, 'test_bin', 'foo') do |fp|
587
+ write_file File.join(@tempdir, "test_bin", "foo") do |fp|
539
588
  fp.puts "#!/usr/bin/ruby"
540
589
  end
541
590
 
542
591
  install_gem a
543
592
 
544
- gem_exec = File.join @gemhome, 'bin', 'foo'
545
- gem_bindir = File.join @tempdir, 'test_bin', 'foo'
593
+ gem_exec = File.join @gemhome, "bin", "foo"
594
+ gem_bindir = File.join @tempdir, "test_bin", "foo"
546
595
 
547
596
  FileUtils.rm gem_exec
548
597
  FileUtils.rm gem_bindir
@@ -558,7 +607,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
558
607
  end
559
608
 
560
609
  def test_execute_unknown_gem_at_remote_source
561
- install_specs util_spec 'a'
610
+ install_specs util_spec "a"
562
611
 
563
612
  @cmd.options[:args] = %w[a]
564
613
 
@@ -597,16 +646,16 @@ class TestGemCommandsPristineCommand < Gem::TestCase
597
646
  end
598
647
 
599
648
  def test_execute_multi_platform
600
- a = util_spec 'a' do |s|
601
- s.extensions << 'ext/a/extconf.rb'
649
+ a = util_spec "a" do |s|
650
+ s.extensions << "ext/a/extconf.rb"
602
651
  end
603
652
 
604
- b = util_spec 'b' do |s|
605
- s.extensions << 'ext/a/extconf.rb'
653
+ b = util_spec "b" do |s|
654
+ s.extensions << "ext/a/extconf.rb"
606
655
  s.platform = Gem::Platform.new("java")
607
656
  end
608
657
 
609
- ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb'
658
+ ext_path = File.join @tempdir, "ext", "a", "extconf.rb"
610
659
  write_file ext_path do |io|
611
660
  io.write <<-'RUBY'
612
661
  File.open "Makefile", "w" do |f|
@@ -632,8 +681,8 @@ class TestGemCommandsPristineCommand < Gem::TestCase
632
681
 
633
682
  out = @ui.output.split "\n"
634
683
 
635
- assert_equal 'Restoring gems to pristine condition...', out.shift
636
- assert_equal 'Building native extensions. This could take a while...',
684
+ assert_equal "Restoring gems to pristine condition...", out.shift
685
+ assert_equal "Building native extensions. This could take a while...",
637
686
  out.shift
638
687
  assert_equal "Restored #{a.full_name}", out.shift
639
688
  assert_empty out, out.inspect