diff options
author | André Arko <andre@arko.net> | 2013-12-09 20:30:56 -0800 |
---|---|---|
committer | André Arko <andre@arko.net> | 2013-12-09 20:30:56 -0800 |
commit | edf527029127383d73c49c65f62335d73753dc16 (patch) | |
tree | 486631e2dd3e83bd32130524e287548b4e68558e | |
parent | 51a31da6c3c17a9f59e18961d42b9a7efda15f92 (diff) | |
parent | 26b4c0b1f0cac043c61d70598cd2382b8c7e1721 (diff) | |
download | bundler-edf527029127383d73c49c65f62335d73753dc16.tar.gz |
Merge pull request #2756 from Who828/improve_child_dependency_message
Improve child dependency conflict message
-rw-r--r-- | lib/bundler/resolver.rb | 26 |
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" |