diff options
author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2022-12-13 18:08:29 +0100 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2022-12-20 13:15:02 +0900 |
commit | d1533f20f1c3f9b6f2324c62ab1460996cda174a (patch) | |
tree | 705fc1a83b9ab4d2b5ffbb93e7993d33f7755bf1 /lib | |
parent | 96aa1a1a9888720d73321013a5cb4de20381a974 (diff) |
[rubygems/rubygems] Detect circular dependency errors
https://github.com/rubygems/rubygems/commit/a8348d271d
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6966
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bundler/resolver.rb | 5 | ||||
-rw-r--r-- | lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index a6d528a346..9d334326d1 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -156,6 +156,11 @@ module Bundler package_deps = @cached_dependencies[package] sorted_versions = @sorted_versions[package] package_deps[version].map do |dep_package, dep_constraint| + if package == dep_package + cause = PubGrub::Incompatibility::CircularDependency.new(dep_package, dep_constraint.constraint_string) + return [PubGrub::Incompatibility.new([PubGrub::Term.new(dep_constraint, true)], :cause => cause)] + end + low = high = sorted_versions.index(version) # find version low such that all >= low share the same dep diff --git a/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb b/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb index 51e1fc3cdd..dab58ecdf7 100644 --- a/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +++ b/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb @@ -8,6 +8,9 @@ module Bundler::PubGrub InvalidDependency = Struct.new(:package, :constraint) do end + CircularDependency = Struct.new(:package, :constraint) do + end + NoVersions = Struct.new(:constraint) do end @@ -63,6 +66,8 @@ module Bundler::PubGrub "#{terms[0].to_s(allow_every: true)} depends on #{terms[1].invert}" when Bundler::PubGrub::Incompatibility::InvalidDependency "#{terms[0].to_s(allow_every: true)} depends on unknown package #{cause.package}" + when Bundler::PubGrub::Incompatibility::CircularDependency + "#{terms[0].to_s(allow_every: true)} depends on itself" when Bundler::PubGrub::Incompatibility::NoVersions "no versions satisfy #{cause.constraint}" when Bundler::PubGrub::Incompatibility::ConflictCause |