summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Arko <andre@arko.net>2013-12-09 20:30:56 -0800
committerAndré Arko <andre@arko.net>2013-12-09 20:30:56 -0800
commitedf527029127383d73c49c65f62335d73753dc16 (patch)
tree486631e2dd3e83bd32130524e287548b4e68558e
parent51a31da6c3c17a9f59e18961d42b9a7efda15f92 (diff)
parent26b4c0b1f0cac043c61d70598cd2382b8c7e1721 (diff)
downloadbundler-edf527029127383d73c49c65f62335d73753dc16.tar.gz
Merge pull request #2756 from Who828/improve_child_dependency_message
Improve child dependency conflict message
-rw-r--r--lib/bundler/resolver.rb26
1 files changed, 20 insertions, 6 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index d2c2a0847f..9920dc39d3 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -438,20 +438,30 @@ module Bundler
end
# For a given conflicted requirement, print out what exactly went wrong
- def gem_message(requirement)
+ def gem_message(requirement, required_by=[])
m = ""
# A requirement that is required by itself is actually in the Gemfile, and does
# not "depend on" itself
if requirement.required_by.first && requirement.required_by.first.name != requirement.name
- m << " #{clean_req(requirement.required_by.first)} depends on\n"
- m << " #{clean_req(requirement)}\n"
+ dependency_tree(m, required_by)
+ m << "#{clean_req(requirement)}\n"
else
m << " #{clean_req(requirement)}\n"
end
m << "\n"
end
+ def dependency_tree(m, requirements)
+ reqs = requirements
+ reqs.each_with_index do |i, j|
+ m << (" " * j)
+ m << "#{clean_req(i)}"
+ m << " depends on\n"
+ end
+ m << (" " * reqs.size)
+ end
+
def error_message
errors.inject("") do |o, (conflict, (origin, requirement))|
@@ -461,7 +471,8 @@ module Bundler
o << %{Bundler could not find compatible versions for gem "#{origin.name}":\n}
o << " In Gemfile:\n"
- o << gem_message(requirement)
+ required_by = requirement.required_by
+ o << gem_message(requirement, required_by)
# If the origin is "bundler", the conflict is us
if origin.name == "bundler"
@@ -472,7 +483,8 @@ module Bundler
o << " In snapshot (Gemfile.lock):\n"
end
- o << gem_message(origin)
+ required_by = origin.required_by[0..-2]
+ o << gem_message(origin, required_by)
# If the bundle wants a newer bundler than the running bundler, explain
if origin.name == "bundler" && other_bundler_required
@@ -495,7 +507,9 @@ module Bundler
o << " #{clean_req(locked)}\n\n"
o << " In Gemfile:\n"
- o << gem_message(requirement)
+
+ required_by = requirement.required_by
+ o << gem_message(requirement, required_by)
o << "Running `bundle update` will rebuild your snapshot from scratch, using only\n"
o << "the gems in your Gemfile, which may resolve the conflict.\n"