Used internally to indicate that a dependency conflicted with a spec that would be activated.
Attributes
Read
The specification that was activated prior to the conflict
Read
The dependency that is in conflict with the activated gem.
Class Methods
2.4
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rubygems/resolver/conflict.rb, line 24
def initialize(dependency, activated, failed_dep=dependency)
@dependency = dependency
@activated = activated
@failed_dep = failed_dep
end
Creates a new resolver conflict when dependency is in conflict with an already activated specification.
Instance Methods
2.4
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rubygems/resolver/conflict.rb, line 47
def conflicting_dependencies
[@failed_dep.dependency, @activated.request.dependency]
end
Return the 2 dependency objects that conflicted
#
2.4
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rubygems/resolver/conflict.rb, line 40
def explain
"<Conflict wanted: #{@failed_dep}, had: #{activated.spec.full_name}>"
end
A string explanation of the conflict.
2.4
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rubygems/resolver/conflict.rb, line 54
def explanation
activated = @activated.spec.full_name
dependency = @failed_dep.dependency
requirement = dependency.requirement
alternates = dependency.matching_specs.map { |spec| spec.full_name }
unless alternates.empty? then
matching = <<-MATCHING.chomp
Gems matching %s:
%s
MATCHING
matching = matching % [
dependency,
alternates.join(', '),
]
end
explanation = <<-EXPLANATION
Activated %s
which does not match conflicting dependency (%s)
Conflicting dependency chains:
%s
versus:
%s
%s
EXPLANATION
explanation % [
activated, requirement,
request_path(@activated).reverse.join(", depends on\n "),
request_path(@failed_dep).reverse.join(", depends on\n "),
matching,
]
end
Explanation of the conflict used by exceptions to print useful messages
2.4
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rubygems/resolver/conflict.rb, line 96
def for_spec?(spec)
@dependency.name == spec.name
end
Returns true if the conflicting dependency’s name matches spec.
2.4
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rubygems/resolver/conflict.rb, line 124
def request_path current
path = []
while current do
case current
when Gem::Resolver::ActivationRequest then
path <<
"#{current.request.dependency}, #{current.spec.version} activated"
current = current.parent
when Gem::Resolver::DependencyRequest then
path << "#{current.dependency}"
current = current.requester
else
raise Gem::Exception, "[BUG] unknown request class #{current.class}"
end
end
path = ['user request (gem command or Gemfile)'] if path.empty?
path
end
Path of activations from the current list.
2.4
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rubygems/resolver/conflict.rb, line 151
def requester
@failed_dep.requester
end
Return the Specification that listed the dependency