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,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'dependency_graph'
4
-
5
- module Bundler::Molinillo
6
- # This class encapsulates a dependency resolver.
7
- # The resolver is responsible for determining which set of dependencies to
8
- # activate, with feedback from the {#specification_provider}
9
- #
10
- #
11
- class Resolver
12
- require_relative 'resolution'
13
-
14
- # @return [SpecificationProvider] the specification provider used
15
- # in the resolution process
16
- attr_reader :specification_provider
17
-
18
- # @return [UI] the UI module used to communicate back to the user
19
- # during the resolution process
20
- attr_reader :resolver_ui
21
-
22
- # Initializes a new resolver.
23
- # @param [SpecificationProvider] specification_provider
24
- # see {#specification_provider}
25
- # @param [UI] resolver_ui
26
- # see {#resolver_ui}
27
- def initialize(specification_provider, resolver_ui)
28
- @specification_provider = specification_provider
29
- @resolver_ui = resolver_ui
30
- end
31
-
32
- # Resolves the requested dependencies into a {DependencyGraph},
33
- # locking to the base dependency graph (if specified)
34
- # @param [Array] requested an array of 'requested' dependencies that the
35
- # {#specification_provider} can understand
36
- # @param [DependencyGraph,nil] base the base dependency graph to which
37
- # dependencies should be 'locked'
38
- def resolve(requested, base = DependencyGraph.new)
39
- Resolution.new(specification_provider,
40
- resolver_ui,
41
- requested,
42
- base).
43
- resolve
44
- end
45
- end
46
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- # A state that a {Resolution} can be in
5
- # @attr [String] name the name of the current requirement
6
- # @attr [Array<Object>] requirements currently unsatisfied requirements
7
- # @attr [DependencyGraph] activated the graph of activated dependencies
8
- # @attr [Object] requirement the current requirement
9
- # @attr [Object] possibilities the possibilities to satisfy the current requirement
10
- # @attr [Integer] depth the depth of the resolution
11
- # @attr [Hash] conflicts unresolved conflicts, indexed by dependency name
12
- # @attr [Array<UnwindDetails>] unused_unwind_options unwinds for previous conflicts that weren't explored
13
- ResolutionState = Struct.new(
14
- :name,
15
- :requirements,
16
- :activated,
17
- :requirement,
18
- :possibilities,
19
- :depth,
20
- :conflicts,
21
- :unused_unwind_options
22
- )
23
-
24
- class ResolutionState
25
- # Returns an empty resolution state
26
- # @return [ResolutionState] an empty state
27
- def self.empty
28
- new(nil, [], DependencyGraph.new, nil, nil, 0, {}, [])
29
- end
30
- end
31
-
32
- # A state that encapsulates a set of {#requirements} with an {Array} of
33
- # possibilities
34
- class DependencyState < ResolutionState
35
- # Removes a possibility from `self`
36
- # @return [PossibilityState] a state with a single possibility,
37
- # the possibility that was removed from `self`
38
- def pop_possibility_state
39
- PossibilityState.new(
40
- name,
41
- requirements.dup,
42
- activated,
43
- requirement,
44
- [possibilities.pop],
45
- depth + 1,
46
- conflicts.dup,
47
- unused_unwind_options.dup
48
- ).tap do |state|
49
- state.activated.tag(state)
50
- end
51
- end
52
- end
53
-
54
- # A state that encapsulates a single possibility to fulfill the given
55
- # {#requirement}
56
- class PossibilityState < ResolutionState
57
- end
58
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'molinillo/gem_metadata'
4
- require_relative 'molinillo/errors'
5
- require_relative 'molinillo/resolver'
6
- require_relative 'molinillo/modules/ui'
7
- require_relative 'molinillo/modules/specification_provider'
8
-
9
- # Bundler::Molinillo is a generic dependency resolution algorithm.
10
- module Bundler::Molinillo
11
- end
@@ -1,154 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # tmpdir - retrieve temporary directory path
4
- #
5
- # $Id$
6
- #
7
-
8
- require_relative '../../fileutils/lib/fileutils'
9
- begin
10
- require 'etc.so'
11
- rescue LoadError # rescue LoadError for miniruby
12
- end
13
-
14
- class Bundler::Dir < Dir
15
-
16
- @systmpdir ||= defined?(Etc.systmpdir) ? Etc.systmpdir : '/tmp'
17
-
18
- ##
19
- # Returns the operating system's temporary file path.
20
-
21
- def self.tmpdir
22
- tmp = nil
23
- ['TMPDIR', 'TMP', 'TEMP', ['system temporary path', @systmpdir], ['/tmp']*2, ['.']*2].each do |name, dir = ENV[name]|
24
- next if !dir
25
- dir = File.expand_path(dir)
26
- stat = File.stat(dir) rescue next
27
- case
28
- when !stat.directory?
29
- warn "#{name} is not a directory: #{dir}"
30
- when !stat.writable?
31
- warn "#{name} is not writable: #{dir}"
32
- when stat.world_writable? && !stat.sticky?
33
- warn "#{name} is world-writable: #{dir}"
34
- else
35
- tmp = dir
36
- break
37
- end
38
- end
39
- raise ArgumentError, "could not find a temporary directory" unless tmp
40
- tmp
41
- end
42
-
43
- # Bundler::Dir.mktmpdir creates a temporary directory.
44
- #
45
- # The directory is created with 0700 permission.
46
- # Application should not change the permission to make the temporary directory accessible from other users.
47
- #
48
- # The prefix and suffix of the name of the directory is specified by
49
- # the optional first argument, <i>prefix_suffix</i>.
50
- # - If it is not specified or nil, "d" is used as the prefix and no suffix is used.
51
- # - If it is a string, it is used as the prefix and no suffix is used.
52
- # - If it is an array, first element is used as the prefix and second element is used as a suffix.
53
- #
54
- # Bundler::Dir.mktmpdir {|dir| dir is ".../d..." }
55
- # Bundler::Dir.mktmpdir("foo") {|dir| dir is ".../foo..." }
56
- # Bundler::Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }
57
- #
58
- # The directory is created under Bundler::Dir.tmpdir or
59
- # the optional second argument <i>tmpdir</i> if non-nil value is given.
60
- #
61
- # Bundler::Dir.mktmpdir {|dir| dir is "#{Bundler::Dir.tmpdir}/d..." }
62
- # Bundler::Dir.mktmpdir(nil, "/var/tmp") {|dir| dir is "/var/tmp/d..." }
63
- #
64
- # If a block is given,
65
- # it is yielded with the path of the directory.
66
- # The directory and its contents are removed
67
- # using Bundler::FileUtils.remove_entry before Bundler::Dir.mktmpdir returns.
68
- # The value of the block is returned.
69
- #
70
- # Bundler::Dir.mktmpdir {|dir|
71
- # # use the directory...
72
- # open("#{dir}/foo", "w") { ... }
73
- # }
74
- #
75
- # If a block is not given,
76
- # The path of the directory is returned.
77
- # In this case, Bundler::Dir.mktmpdir doesn't remove the directory.
78
- #
79
- # dir = Bundler::Dir.mktmpdir
80
- # begin
81
- # # use the directory...
82
- # open("#{dir}/foo", "w") { ... }
83
- # ensure
84
- # # remove the directory.
85
- # Bundler::FileUtils.remove_entry dir
86
- # end
87
- #
88
- def self.mktmpdir(prefix_suffix=nil, *rest, **options)
89
- base = nil
90
- path = Tmpname.create(prefix_suffix || "d", *rest, **options) {|p, _, _, d|
91
- base = d
92
- mkdir(p, 0700)
93
- }
94
- if block_given?
95
- begin
96
- yield path.dup
97
- ensure
98
- unless base
99
- stat = File.stat(File.dirname(path))
100
- if stat.world_writable? and !stat.sticky?
101
- raise ArgumentError, "parent directory is world writable but not sticky"
102
- end
103
- end
104
- Bundler::FileUtils.remove_entry path
105
- end
106
- else
107
- path
108
- end
109
- end
110
-
111
- module Tmpname # :nodoc:
112
- module_function
113
-
114
- def tmpdir
115
- Bundler::Dir.tmpdir
116
- end
117
-
118
- UNUSABLE_CHARS = "^,-.0-9A-Z_a-z~"
119
-
120
- class << (RANDOM = Random.new)
121
- MAX = 36**6 # < 0x100000000
122
- def next
123
- rand(MAX).to_s(36)
124
- end
125
- end
126
- private_constant :RANDOM
127
-
128
- def create(basename, tmpdir=nil, max_try: nil, **opts)
129
- origdir = tmpdir
130
- tmpdir ||= tmpdir()
131
- n = nil
132
- prefix, suffix = basename
133
- prefix = (String.try_convert(prefix) or
134
- raise ArgumentError, "unexpected prefix: #{prefix.inspect}")
135
- prefix = prefix.delete(UNUSABLE_CHARS)
136
- suffix &&= (String.try_convert(suffix) or
137
- raise ArgumentError, "unexpected suffix: #{suffix.inspect}")
138
- suffix &&= suffix.delete(UNUSABLE_CHARS)
139
- begin
140
- t = Time.now.strftime("%Y%m%d")
141
- path = "#{prefix}#{t}-#{$$}-#{RANDOM.next}"\
142
- "#{n ? %[-#{n}] : ''}#{suffix||''}"
143
- path = File.join(tmpdir, path)
144
- yield(path, n, opts, origdir)
145
- rescue Errno::EEXIST
146
- n ||= 0
147
- n += 1
148
- retry if !max_try or n < max_try
149
- raise "cannot generate temporary name using `#{basename}' under `#{tmpdir}'"
150
- end
151
- path
152
- end
153
- end
154
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler; end
4
- require_relative "vendor/molinillo/lib/molinillo"
@@ -1,122 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler
4
- module VersionRanges
5
- NEq = Struct.new(:version)
6
- ReqR = Struct.new(:left, :right)
7
- class ReqR
8
- Endpoint = Struct.new(:version, :inclusive) do
9
- def <=>(other)
10
- if version.equal?(INFINITY)
11
- return 0 if other.version.equal?(INFINITY)
12
- return 1
13
- elsif other.version.equal?(INFINITY)
14
- return -1
15
- end
16
-
17
- comp = version <=> other.version
18
- return comp unless comp.zero?
19
-
20
- if inclusive && !other.inclusive
21
- 1
22
- elsif !inclusive && other.inclusive
23
- -1
24
- else
25
- 0
26
- end
27
- end
28
- end
29
-
30
- def to_s
31
- "#{left.inclusive ? "[" : "("}#{left.version}, #{right.version}#{right.inclusive ? "]" : ")"}"
32
- end
33
- INFINITY = begin
34
- inf = Object.new
35
- def inf.to_s
36
- "∞"
37
- end
38
- def inf.<=>(other)
39
- return 0 if other.equal?(self)
40
- 1
41
- end
42
- inf.freeze
43
- end
44
- ZERO = Gem::Version.new("0.a")
45
-
46
- def cover?(v)
47
- return false if left.inclusive && left.version > v
48
- return false if !left.inclusive && left.version >= v
49
-
50
- if right.version != INFINITY
51
- return false if right.inclusive && right.version < v
52
- return false if !right.inclusive && right.version <= v
53
- end
54
-
55
- true
56
- end
57
-
58
- def empty?
59
- left.version == right.version && !(left.inclusive && right.inclusive)
60
- end
61
-
62
- def single?
63
- left.version == right.version
64
- end
65
-
66
- def <=>(other)
67
- return -1 if other.equal?(INFINITY)
68
-
69
- comp = left <=> other.left
70
- return comp unless comp.zero?
71
-
72
- right <=> other.right
73
- end
74
-
75
- UNIVERSAL = ReqR.new(ReqR::Endpoint.new(Gem::Version.new("0.a"), true), ReqR::Endpoint.new(ReqR::INFINITY, false)).freeze
76
- end
77
-
78
- def self.for_many(requirements)
79
- requirements = requirements.map(&:requirements).flatten(1).map {|r| r.join(" ") }
80
- requirements << ">= 0.a" if requirements.empty?
81
- requirement = Gem::Requirement.new(requirements)
82
- self.for(requirement)
83
- end
84
-
85
- def self.for(requirement)
86
- ranges = requirement.requirements.map do |op, v|
87
- case op
88
- when "=" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(v, true))
89
- when "!=" then NEq.new(v)
90
- when ">=" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(ReqR::INFINITY, false))
91
- when ">" then ReqR.new(ReqR::Endpoint.new(v, false), ReqR::Endpoint.new(ReqR::INFINITY, false))
92
- when "<" then ReqR.new(ReqR::Endpoint.new(ReqR::ZERO, true), ReqR::Endpoint.new(v, false))
93
- when "<=" then ReqR.new(ReqR::Endpoint.new(ReqR::ZERO, true), ReqR::Endpoint.new(v, true))
94
- when "~>" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(v.bump, false))
95
- else raise "unknown version op #{op} in requirement #{requirement}"
96
- end
97
- end.uniq
98
- ranges, neqs = ranges.partition {|r| !r.is_a?(NEq) }
99
-
100
- [ranges.sort, neqs.map(&:version)]
101
- end
102
-
103
- def self.empty?(ranges, neqs)
104
- !ranges.reduce(ReqR::UNIVERSAL) do |last_range, curr_range|
105
- next false unless last_range
106
- next false if curr_range.single? && neqs.include?(curr_range.left.version)
107
- next curr_range if last_range.right.version == ReqR::INFINITY
108
- case last_range.right.version <=> curr_range.left.version
109
- # higher
110
- when 1 then next ReqR.new(curr_range.left, last_range.right)
111
- # equal
112
- when 0
113
- if last_range.right.inclusive && curr_range.left.inclusive && !neqs.include?(curr_range.left.version)
114
- ReqR.new(curr_range.left, [curr_range.right, last_range.right].max)
115
- end
116
- # lower
117
- when -1 then next false
118
- end
119
- end
120
- end
121
- end
122
- end