rubygems-update 3.3.26 → 3.4.1

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 (272) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +35 -0
  3. data/CONTRIBUTING.md +24 -1
  4. data/Manifest.txt +30 -27
  5. data/POLICIES.md +10 -8
  6. data/README.md +2 -2
  7. data/bin/gem +1 -4
  8. data/bin/update_rubygems +1 -1
  9. data/bundler/CHANGELOG.md +59 -0
  10. data/bundler/README.md +2 -2
  11. data/bundler/bundler.gemspec +2 -2
  12. data/bundler/exe/bundle +1 -4
  13. data/bundler/lib/bundler/build_metadata.rb +2 -2
  14. data/bundler/lib/bundler/cli/add.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +1 -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/install.rb +2 -3
  21. data/bundler/lib/bundler/cli/lock.rb +8 -5
  22. data/bundler/lib/bundler/cli/outdated.rb +1 -3
  23. data/bundler/lib/bundler/cli/viz.rb +1 -1
  24. data/bundler/lib/bundler/cli.rb +43 -2
  25. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  26. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  27. data/bundler/lib/bundler/constants.rb +1 -1
  28. data/bundler/lib/bundler/definition.rb +61 -31
  29. data/bundler/lib/bundler/dependency.rb +12 -11
  30. data/bundler/lib/bundler/digest.rb +1 -1
  31. data/bundler/lib/bundler/dsl.rb +1 -1
  32. data/bundler/lib/bundler/env.rb +1 -1
  33. data/bundler/lib/bundler/environment_preserver.rb +1 -0
  34. data/bundler/lib/bundler/errors.rb +1 -11
  35. data/bundler/lib/bundler/fetcher/compact_index.rb +9 -11
  36. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  37. data/bundler/lib/bundler/fetcher/downloader.rb +2 -5
  38. data/bundler/lib/bundler/fetcher.rb +2 -6
  39. data/bundler/lib/bundler/force_platform.rb +18 -0
  40. data/bundler/lib/bundler/friendly_errors.rb +0 -3
  41. data/bundler/lib/bundler/gem_version_promoter.rb +52 -86
  42. data/bundler/lib/bundler/graph.rb +3 -3
  43. data/bundler/lib/bundler/index.rb +5 -13
  44. data/bundler/lib/bundler/injector.rb +1 -1
  45. data/bundler/lib/bundler/inline.rb +2 -2
  46. data/bundler/lib/bundler/installer/parallel_installer.rb +0 -31
  47. data/bundler/lib/bundler/installer.rb +6 -16
  48. data/bundler/lib/bundler/lazy_specification.rb +5 -1
  49. data/bundler/lib/bundler/lockfile_parser.rb +5 -5
  50. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  51. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  52. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  53. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  55. data/bundler/lib/bundler/man/bundle-config.1 +1 -1
  56. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  57. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  58. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  59. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  60. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  61. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  62. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  63. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  64. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-install.1 +1 -30
  66. data/bundler/lib/bundler/man/bundle-install.1.ronn +0 -29
  67. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  69. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  70. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  71. data/bundler/lib/bundler/man/bundle-platform.1 +2 -2
  72. data/bundler/lib/bundler/man/bundle-platform.1.ronn +1 -1
  73. data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
  74. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  76. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  77. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  78. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  79. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  80. data/bundler/lib/bundler/man/bundle.1 +1 -1
  81. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  82. data/bundler/lib/bundler/mirror.rb +5 -7
  83. data/bundler/lib/bundler/plugin/index.rb +4 -4
  84. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  85. data/bundler/lib/bundler/resolver/base.rb +7 -11
  86. data/bundler/lib/bundler/resolver/candidate.rb +92 -0
  87. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  88. data/bundler/lib/bundler/resolver/package.rb +63 -0
  89. data/bundler/lib/bundler/resolver/root.rb +25 -0
  90. data/bundler/lib/bundler/resolver/spec_group.rb +26 -36
  91. data/bundler/lib/bundler/resolver.rb +294 -277
  92. data/bundler/lib/bundler/rubygems_ext.rb +11 -6
  93. data/bundler/lib/bundler/rubygems_gem_installer.rb +4 -2
  94. data/bundler/lib/bundler/rubygems_integration.rb +1 -9
  95. data/bundler/lib/bundler/runtime.rb +1 -5
  96. data/bundler/lib/bundler/settings.rb +0 -6
  97. data/bundler/lib/bundler/shared_helpers.rb +1 -0
  98. data/bundler/lib/bundler/source/git/git_proxy.rb +193 -67
  99. data/bundler/lib/bundler/source/git.rb +15 -17
  100. data/bundler/lib/bundler/source/metadata.rb +0 -1
  101. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  102. data/bundler/lib/bundler/source/path.rb +5 -5
  103. data/bundler/lib/bundler/source/rubygems.rb +13 -67
  104. data/bundler/lib/bundler/source_list.rb +8 -2
  105. data/bundler/lib/bundler/spec_set.rb +7 -9
  106. data/bundler/lib/bundler/templates/Executable +1 -1
  107. data/bundler/lib/bundler/templates/Executable.bundler +4 -9
  108. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  109. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  110. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  111. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  112. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -1
  113. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  114. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  115. data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +0 -0
  116. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  117. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  118. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  119. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  120. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +8 -0
  121. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
  122. data/bundler/lib/bundler/ui/shell.rb +35 -12
  123. data/bundler/lib/bundler/ui/silent.rb +21 -5
  124. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  125. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  126. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  127. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -408
  128. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  129. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  130. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  131. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  132. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  133. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  134. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +151 -0
  135. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  136. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  137. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  138. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  139. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +53 -0
  140. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  141. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  142. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +124 -0
  143. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +409 -0
  144. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +240 -0
  145. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  146. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  147. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  148. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  149. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  150. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  151. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  152. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  153. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  154. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  155. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  156. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  157. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +13 -7
  158. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +10 -5
  159. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  160. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  161. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  162. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  163. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  164. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  165. data/bundler/lib/bundler/version.rb +5 -1
  166. data/bundler/lib/bundler/worker.rb +5 -7
  167. data/bundler/lib/bundler.rb +20 -64
  168. data/lib/rubygems/command_manager.rb +2 -2
  169. data/lib/rubygems/commands/fetch_command.rb +1 -1
  170. data/lib/rubygems/commands/install_command.rb +7 -3
  171. data/lib/rubygems/commands/rdoc_command.rb +3 -2
  172. data/lib/rubygems/commands/setup_command.rb +2 -2
  173. data/lib/rubygems/commands/unpack_command.rb +1 -1
  174. data/lib/rubygems/commands/update_command.rb +1 -7
  175. data/lib/rubygems/config_file.rb +33 -0
  176. data/lib/rubygems/core_ext/kernel_warn.rb +1 -2
  177. data/lib/rubygems/defaults.rb +15 -1
  178. data/lib/rubygems/dependency.rb +4 -1
  179. data/lib/rubygems/dependency_installer.rb +24 -24
  180. data/lib/rubygems/exceptions.rb +1 -3
  181. data/lib/rubygems/ext/builder.rb +3 -3
  182. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  183. data/lib/rubygems/ext/cargo_builder.rb +15 -20
  184. data/lib/rubygems/ext/ext_conf_builder.rb +2 -0
  185. data/lib/rubygems/indexer.rb +1 -1
  186. data/lib/rubygems/installer.rb +5 -5
  187. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  188. data/lib/rubygems/package/tar_header.rb +11 -11
  189. data/lib/rubygems/platform.rb +0 -2
  190. data/lib/rubygems/request_set/gem_dependency_api.rb +104 -104
  191. data/lib/rubygems/requirement.rb +7 -7
  192. data/lib/rubygems/resolver/installer_set.rb +1 -1
  193. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  194. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  195. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  196. data/lib/rubygems/security/policies.rb +40 -40
  197. data/lib/rubygems/security/trust_dir.rb +1 -1
  198. data/lib/rubygems/security.rb +3 -16
  199. data/lib/rubygems/source.rb +2 -2
  200. data/lib/rubygems/specification.rb +37 -49
  201. data/lib/rubygems/specification_policy.rb +14 -0
  202. data/lib/rubygems/stub_specification.rb +2 -2
  203. data/lib/rubygems/text.rb +1 -1
  204. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  205. data/lib/rubygems/update_suggestion.rb +69 -0
  206. data/lib/rubygems/util.rb +1 -5
  207. data/lib/rubygems/validator.rb +1 -1
  208. data/lib/rubygems.rb +8 -3
  209. data/rubygems-update.gemspec +2 -2
  210. data/test/rubygems/helper.rb +7 -3
  211. data/test/rubygems/test_bundled_ca.rb +1 -1
  212. data/test/rubygems/test_exit.rb +6 -0
  213. data/test/rubygems/test_gem.rb +4 -9
  214. data/test/rubygems/test_gem_bundler_version_finder.rb +2 -1
  215. data/test/rubygems/test_gem_command_manager.rb +1 -1
  216. data/test/rubygems/test_gem_commands_install_command.rb +19 -0
  217. data/test/rubygems/test_gem_commands_setup_command.rb +1 -8
  218. data/test/rubygems/test_gem_commands_update_command.rb +6 -6
  219. data/test/rubygems/test_gem_config_file.rb +1 -1
  220. data/test/rubygems/test_gem_dependency.rb +2 -0
  221. data/test/rubygems/test_gem_ext_builder.rb +3 -3
  222. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +22 -32
  223. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
  224. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +22 -32
  225. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  226. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  227. data/test/rubygems/test_gem_ext_cargo_builder.rb +22 -27
  228. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +16 -16
  229. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -10
  230. data/test/rubygems/test_gem_indexer.rb +39 -20
  231. data/test/rubygems/test_gem_installer.rb +68 -2
  232. data/test/rubygems/test_gem_package_tar_header.rb +13 -13
  233. data/test/rubygems/test_gem_platform.rb +59 -60
  234. data/test/rubygems/test_gem_remote_fetcher.rb +4 -4
  235. data/test/rubygems/test_gem_request_set.rb +2 -2
  236. data/test/rubygems/test_gem_requirement.rb +1 -1
  237. data/test/rubygems/test_gem_resolver_api_set.rb +12 -12
  238. data/test/rubygems/test_gem_resolver_api_specification.rb +19 -19
  239. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -1
  240. data/test/rubygems/test_gem_security_policy.rb +10 -10
  241. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  242. data/test/rubygems/test_gem_specification.rb +50 -37
  243. data/test/rubygems/test_gem_uninstaller.rb +1 -1
  244. data/test/rubygems/test_gem_update_suggestion.rb +208 -0
  245. data/test/rubygems/test_kernel.rb +10 -8
  246. data/test/rubygems/test_require.rb +70 -55
  247. metadata +34 -31
  248. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  249. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  250. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  251. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  252. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  253. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  254. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  255. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  256. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  257. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  258. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  259. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  260. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  261. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  262. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  263. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  264. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  265. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  266. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  267. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  268. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  269. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  270. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  271. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  272. data/bundler/lib/bundler/version_ranges.rb +0 -122
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- # @!visibility private
5
- module Delegates
6
- # Delegates all {Bundler::Molinillo::ResolutionState} methods to a `#state` property.
7
- module ResolutionState
8
- # (see Bundler::Molinillo::ResolutionState#name)
9
- def name
10
- current_state = state || Bundler::Molinillo::ResolutionState.empty
11
- current_state.name
12
- end
13
-
14
- # (see Bundler::Molinillo::ResolutionState#requirements)
15
- def requirements
16
- current_state = state || Bundler::Molinillo::ResolutionState.empty
17
- current_state.requirements
18
- end
19
-
20
- # (see Bundler::Molinillo::ResolutionState#activated)
21
- def activated
22
- current_state = state || Bundler::Molinillo::ResolutionState.empty
23
- current_state.activated
24
- end
25
-
26
- # (see Bundler::Molinillo::ResolutionState#requirement)
27
- def requirement
28
- current_state = state || Bundler::Molinillo::ResolutionState.empty
29
- current_state.requirement
30
- end
31
-
32
- # (see Bundler::Molinillo::ResolutionState#possibilities)
33
- def possibilities
34
- current_state = state || Bundler::Molinillo::ResolutionState.empty
35
- current_state.possibilities
36
- end
37
-
38
- # (see Bundler::Molinillo::ResolutionState#depth)
39
- def depth
40
- current_state = state || Bundler::Molinillo::ResolutionState.empty
41
- current_state.depth
42
- end
43
-
44
- # (see Bundler::Molinillo::ResolutionState#conflicts)
45
- def conflicts
46
- current_state = state || Bundler::Molinillo::ResolutionState.empty
47
- current_state.conflicts
48
- end
49
-
50
- # (see Bundler::Molinillo::ResolutionState#unused_unwind_options)
51
- def unused_unwind_options
52
- current_state = state || Bundler::Molinillo::ResolutionState.empty
53
- current_state.unused_unwind_options
54
- end
55
- end
56
- end
57
- end
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- module Delegates
5
- # Delegates all {Bundler::Molinillo::SpecificationProvider} methods to a
6
- # `#specification_provider` property.
7
- module SpecificationProvider
8
- # (see Bundler::Molinillo::SpecificationProvider#search_for)
9
- def search_for(dependency)
10
- with_no_such_dependency_error_handling do
11
- specification_provider.search_for(dependency)
12
- end
13
- end
14
-
15
- # (see Bundler::Molinillo::SpecificationProvider#dependencies_for)
16
- def dependencies_for(specification)
17
- with_no_such_dependency_error_handling do
18
- specification_provider.dependencies_for(specification)
19
- end
20
- end
21
-
22
- # (see Bundler::Molinillo::SpecificationProvider#requirement_satisfied_by?)
23
- def requirement_satisfied_by?(requirement, activated, spec)
24
- with_no_such_dependency_error_handling do
25
- specification_provider.requirement_satisfied_by?(requirement, activated, spec)
26
- end
27
- end
28
-
29
- # (see Bundler::Molinillo::SpecificationProvider#dependencies_equal?)
30
- def dependencies_equal?(dependencies, other_dependencies)
31
- with_no_such_dependency_error_handling do
32
- specification_provider.dependencies_equal?(dependencies, other_dependencies)
33
- end
34
- end
35
-
36
- # (see Bundler::Molinillo::SpecificationProvider#name_for)
37
- def name_for(dependency)
38
- with_no_such_dependency_error_handling do
39
- specification_provider.name_for(dependency)
40
- end
41
- end
42
-
43
- # (see Bundler::Molinillo::SpecificationProvider#name_for_explicit_dependency_source)
44
- def name_for_explicit_dependency_source
45
- with_no_such_dependency_error_handling do
46
- specification_provider.name_for_explicit_dependency_source
47
- end
48
- end
49
-
50
- # (see Bundler::Molinillo::SpecificationProvider#name_for_locking_dependency_source)
51
- def name_for_locking_dependency_source
52
- with_no_such_dependency_error_handling do
53
- specification_provider.name_for_locking_dependency_source
54
- end
55
- end
56
-
57
- # (see Bundler::Molinillo::SpecificationProvider#sort_dependencies)
58
- def sort_dependencies(dependencies, activated, conflicts)
59
- with_no_such_dependency_error_handling do
60
- specification_provider.sort_dependencies(dependencies, activated, conflicts)
61
- end
62
- end
63
-
64
- # (see Bundler::Molinillo::SpecificationProvider#allow_missing?)
65
- def allow_missing?(dependency)
66
- with_no_such_dependency_error_handling do
67
- specification_provider.allow_missing?(dependency)
68
- end
69
- end
70
-
71
- private
72
-
73
- # Ensures any raised {NoSuchDependencyError} has its
74
- # {NoSuchDependencyError#required_by} set.
75
- # @yield
76
- def with_no_such_dependency_error_handling
77
- yield
78
- rescue NoSuchDependencyError => error
79
- if state
80
- vertex = activated.vertex_named(name_for(error.dependency))
81
- error.required_by += vertex.incoming_edges.map { |e| e.origin.name }
82
- error.required_by << name_for_explicit_dependency_source unless vertex.explicit_requirements.empty?
83
- end
84
- raise
85
- end
86
- end
87
- end
88
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- class DependencyGraph
5
- # An action that modifies a {DependencyGraph} that is reversible.
6
- # @abstract
7
- class Action
8
- # rubocop:disable Lint/UnusedMethodArgument
9
-
10
- # @return [Symbol] The name of the action.
11
- def self.action_name
12
- raise 'Abstract'
13
- end
14
-
15
- # Performs the action on the given graph.
16
- # @param [DependencyGraph] graph the graph to perform the action on.
17
- # @return [Void]
18
- def up(graph)
19
- raise 'Abstract'
20
- end
21
-
22
- # Reverses the action on the given graph.
23
- # @param [DependencyGraph] graph the graph to reverse the action on.
24
- # @return [Void]
25
- def down(graph)
26
- raise 'Abstract'
27
- end
28
-
29
- # @return [Action,Nil] The previous action
30
- attr_accessor :previous
31
-
32
- # @return [Action,Nil] The next action
33
- attr_accessor :next
34
- end
35
- end
36
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # (see DependencyGraph#add_edge_no_circular)
8
- class AddEdgeNoCircular < Action
9
- # @!group Action
10
-
11
- # (see Action.action_name)
12
- def self.action_name
13
- :add_vertex
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- edge = make_edge(graph)
19
- edge.origin.outgoing_edges << edge
20
- edge.destination.incoming_edges << edge
21
- edge
22
- end
23
-
24
- # (see Action#down)
25
- def down(graph)
26
- edge = make_edge(graph)
27
- delete_first(edge.origin.outgoing_edges, edge)
28
- delete_first(edge.destination.incoming_edges, edge)
29
- end
30
-
31
- # @!group AddEdgeNoCircular
32
-
33
- # @return [String] the name of the origin of the edge
34
- attr_reader :origin
35
-
36
- # @return [String] the name of the destination of the edge
37
- attr_reader :destination
38
-
39
- # @return [Object] the requirement that the edge represents
40
- attr_reader :requirement
41
-
42
- # @param [DependencyGraph] graph the graph to find vertices from
43
- # @return [Edge] The edge this action adds
44
- def make_edge(graph)
45
- Edge.new(graph.vertex_named(origin), graph.vertex_named(destination), requirement)
46
- end
47
-
48
- # Initialize an action to add an edge to a dependency graph
49
- # @param [String] origin the name of the origin of the edge
50
- # @param [String] destination the name of the destination of the edge
51
- # @param [Object] requirement the requirement that the edge represents
52
- def initialize(origin, destination, requirement)
53
- @origin = origin
54
- @destination = destination
55
- @requirement = requirement
56
- end
57
-
58
- private
59
-
60
- def delete_first(array, item)
61
- return unless index = array.index(item)
62
- array.delete_at(index)
63
- end
64
- end
65
- end
66
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # (see DependencyGraph#add_vertex)
8
- class AddVertex < Action # :nodoc:
9
- # @!group Action
10
-
11
- # (see Action.action_name)
12
- def self.action_name
13
- :add_vertex
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- if existing = graph.vertices[name]
19
- @existing_payload = existing.payload
20
- @existing_root = existing.root
21
- end
22
- vertex = existing || Vertex.new(name, payload)
23
- graph.vertices[vertex.name] = vertex
24
- vertex.payload ||= payload
25
- vertex.root ||= root
26
- vertex
27
- end
28
-
29
- # (see Action#down)
30
- def down(graph)
31
- if defined?(@existing_payload)
32
- vertex = graph.vertices[name]
33
- vertex.payload = @existing_payload
34
- vertex.root = @existing_root
35
- else
36
- graph.vertices.delete(name)
37
- end
38
- end
39
-
40
- # @!group AddVertex
41
-
42
- # @return [String] the name of the vertex
43
- attr_reader :name
44
-
45
- # @return [Object] the payload for the vertex
46
- attr_reader :payload
47
-
48
- # @return [Boolean] whether the vertex is root or not
49
- attr_reader :root
50
-
51
- # Initialize an action to add a vertex to a dependency graph
52
- # @param [String] name the name of the vertex
53
- # @param [Object] payload the payload for the vertex
54
- # @param [Boolean] root whether the vertex is root or not
55
- def initialize(name, payload, root)
56
- @name = name
57
- @payload = payload
58
- @root = root
59
- end
60
- end
61
- end
62
- end
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # (see DependencyGraph#delete_edge)
8
- class DeleteEdge < Action
9
- # @!group Action
10
-
11
- # (see Action.action_name)
12
- def self.action_name
13
- :delete_edge
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- edge = make_edge(graph)
19
- edge.origin.outgoing_edges.delete(edge)
20
- edge.destination.incoming_edges.delete(edge)
21
- end
22
-
23
- # (see Action#down)
24
- def down(graph)
25
- edge = make_edge(graph)
26
- edge.origin.outgoing_edges << edge
27
- edge.destination.incoming_edges << edge
28
- edge
29
- end
30
-
31
- # @!group DeleteEdge
32
-
33
- # @return [String] the name of the origin of the edge
34
- attr_reader :origin_name
35
-
36
- # @return [String] the name of the destination of the edge
37
- attr_reader :destination_name
38
-
39
- # @return [Object] the requirement that the edge represents
40
- attr_reader :requirement
41
-
42
- # @param [DependencyGraph] graph the graph to find vertices from
43
- # @return [Edge] The edge this action adds
44
- def make_edge(graph)
45
- Edge.new(
46
- graph.vertex_named(origin_name),
47
- graph.vertex_named(destination_name),
48
- requirement
49
- )
50
- end
51
-
52
- # Initialize an action to add an edge to a dependency graph
53
- # @param [String] origin_name the name of the origin of the edge
54
- # @param [String] destination_name the name of the destination of the edge
55
- # @param [Object] requirement the requirement that the edge represents
56
- def initialize(origin_name, destination_name, requirement)
57
- @origin_name = origin_name
58
- @destination_name = destination_name
59
- @requirement = requirement
60
- end
61
- end
62
- end
63
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # @see DependencyGraph#detach_vertex_named
8
- class DetachVertexNamed < Action
9
- # @!group Action
10
-
11
- # (see Action#name)
12
- def self.action_name
13
- :add_vertex
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- return [] unless @vertex = graph.vertices.delete(name)
19
-
20
- removed_vertices = [@vertex]
21
- @vertex.outgoing_edges.each do |e|
22
- v = e.destination
23
- v.incoming_edges.delete(e)
24
- if !v.root? && v.incoming_edges.empty?
25
- removed_vertices.concat graph.detach_vertex_named(v.name)
26
- end
27
- end
28
-
29
- @vertex.incoming_edges.each do |e|
30
- v = e.origin
31
- v.outgoing_edges.delete(e)
32
- end
33
-
34
- removed_vertices
35
- end
36
-
37
- # (see Action#down)
38
- def down(graph)
39
- return unless @vertex
40
- graph.vertices[@vertex.name] = @vertex
41
- @vertex.outgoing_edges.each do |e|
42
- e.destination.incoming_edges << e
43
- end
44
- @vertex.incoming_edges.each do |e|
45
- e.origin.outgoing_edges << e
46
- end
47
- end
48
-
49
- # @!group DetachVertexNamed
50
-
51
- # @return [String] the name of the vertex to detach
52
- attr_reader :name
53
-
54
- # Initialize an action to detach a vertex from a dependency graph
55
- # @param [String] name the name of the vertex to detach
56
- def initialize(name)
57
- @name = name
58
- end
59
- end
60
- end
61
- end
@@ -1,126 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'add_edge_no_circular'
4
- require_relative 'add_vertex'
5
- require_relative 'delete_edge'
6
- require_relative 'detach_vertex_named'
7
- require_relative 'set_payload'
8
- require_relative 'tag'
9
-
10
- module Bundler::Molinillo
11
- class DependencyGraph
12
- # A log for dependency graph actions
13
- class Log
14
- # Initializes an empty log
15
- def initialize
16
- @current_action = @first_action = nil
17
- end
18
-
19
- # @!macro [new] action
20
- # {include:DependencyGraph#$0}
21
- # @param [Graph] graph the graph to perform the action on
22
- # @param (see DependencyGraph#$0)
23
- # @return (see DependencyGraph#$0)
24
-
25
- # @macro action
26
- def tag(graph, tag)
27
- push_action(graph, Tag.new(tag))
28
- end
29
-
30
- # @macro action
31
- def add_vertex(graph, name, payload, root)
32
- push_action(graph, AddVertex.new(name, payload, root))
33
- end
34
-
35
- # @macro action
36
- def detach_vertex_named(graph, name)
37
- push_action(graph, DetachVertexNamed.new(name))
38
- end
39
-
40
- # @macro action
41
- def add_edge_no_circular(graph, origin, destination, requirement)
42
- push_action(graph, AddEdgeNoCircular.new(origin, destination, requirement))
43
- end
44
-
45
- # {include:DependencyGraph#delete_edge}
46
- # @param [Graph] graph the graph to perform the action on
47
- # @param [String] origin_name
48
- # @param [String] destination_name
49
- # @param [Object] requirement
50
- # @return (see DependencyGraph#delete_edge)
51
- def delete_edge(graph, origin_name, destination_name, requirement)
52
- push_action(graph, DeleteEdge.new(origin_name, destination_name, requirement))
53
- end
54
-
55
- # @macro action
56
- def set_payload(graph, name, payload)
57
- push_action(graph, SetPayload.new(name, payload))
58
- end
59
-
60
- # Pops the most recent action from the log and undoes the action
61
- # @param [DependencyGraph] graph
62
- # @return [Action] the action that was popped off the log
63
- def pop!(graph)
64
- return unless action = @current_action
65
- unless @current_action = action.previous
66
- @first_action = nil
67
- end
68
- action.down(graph)
69
- action
70
- end
71
-
72
- extend Enumerable
73
-
74
- # @!visibility private
75
- # Enumerates each action in the log
76
- # @yield [Action]
77
- def each
78
- return enum_for unless block_given?
79
- action = @first_action
80
- loop do
81
- break unless action
82
- yield action
83
- action = action.next
84
- end
85
- self
86
- end
87
-
88
- # @!visibility private
89
- # Enumerates each action in the log in reverse order
90
- # @yield [Action]
91
- def reverse_each
92
- return enum_for(:reverse_each) unless block_given?
93
- action = @current_action
94
- loop do
95
- break unless action
96
- yield action
97
- action = action.previous
98
- end
99
- self
100
- end
101
-
102
- # @macro action
103
- def rewind_to(graph, tag)
104
- loop do
105
- action = pop!(graph)
106
- raise "No tag #{tag.inspect} found" unless action
107
- break if action.class.action_name == :tag && action.tag == tag
108
- end
109
- end
110
-
111
- private
112
-
113
- # Adds the given action to the log, running the action
114
- # @param [DependencyGraph] graph
115
- # @param [Action] action
116
- # @return The value returned by `action.up`
117
- def push_action(graph, action)
118
- action.previous = @current_action
119
- @current_action.next = action if @current_action
120
- @current_action = action
121
- @first_action ||= action
122
- action.up(graph)
123
- end
124
- end
125
- end
126
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # @see DependencyGraph#set_payload
8
- class SetPayload < Action # :nodoc:
9
- # @!group Action
10
-
11
- # (see Action.action_name)
12
- def self.action_name
13
- :set_payload
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- vertex = graph.vertex_named(name)
19
- @old_payload = vertex.payload
20
- vertex.payload = payload
21
- end
22
-
23
- # (see Action#down)
24
- def down(graph)
25
- graph.vertex_named(name).payload = @old_payload
26
- end
27
-
28
- # @!group SetPayload
29
-
30
- # @return [String] the name of the vertex
31
- attr_reader :name
32
-
33
- # @return [Object] the payload for the vertex
34
- attr_reader :payload
35
-
36
- # Initialize an action to add set the payload for a vertex in a dependency
37
- # graph
38
- # @param [String] name the name of the vertex
39
- # @param [Object] payload the payload for the vertex
40
- def initialize(name, payload)
41
- @name = name
42
- @payload = payload
43
- end
44
- end
45
- end
46
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # @see DependencyGraph#tag
8
- class Tag < Action
9
- # @!group Action
10
-
11
- # (see Action.action_name)
12
- def self.action_name
13
- :tag
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- end
19
-
20
- # (see Action#down)
21
- def down(graph)
22
- end
23
-
24
- # @!group Tag
25
-
26
- # @return [Object] An opaque tag
27
- attr_reader :tag
28
-
29
- # Initialize an action to tag a state of a dependency graph
30
- # @param [Object] tag an opaque tag
31
- def initialize(tag)
32
- @tag = tag
33
- end
34
- end
35
- end
36
- end