diff options
author | Smit Shah <who828@gmail.com> | 2013-11-27 01:51:33 +0530 |
---|---|---|
committer | Smit Shah <who828@gmail.com> | 2013-11-27 01:51:33 +0530 |
commit | 56f9ae03c2e0e54e3f73e46ec5664bfe5a0ca1a4 (patch) | |
tree | 62f4d25ba0de08f474b813ace7a0d6448cfdbabf /lib/bundler/resolver.rb | |
parent | ae19fdda753068984f728fd3baaf6c7a2d819aad (diff) | |
download | bundler-56f9ae03c2e0e54e3f73e46ec5664bfe5a0ca1a4.tar.gz |
Print out the depedency tree in case of version_conflict in a child dependency
Diffstat (limited to 'lib/bundler/resolver.rb')
-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 e603e1b220..cbffd3906d 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -405,20 +405,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" + print_dependency_tree(m, required_by) + m << "#{clean_req(requirement)}\n" else m << " #{clean_req(requirement)}\n" end m << "\n" end + def print_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))| @@ -428,7 +438,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" @@ -439,7 +450,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 @@ -462,7 +474,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" |