diff options
author | Carlhuda <carlhuda@engineyard.com> | 2010-06-16 14:14:57 -0700 |
---|---|---|
committer | wycats <wycats@gmail.com> | 2010-06-29 14:44:31 -0700 |
commit | 5bd2958e1c38f4595bdd4fd226f6433eb9efc5d3 (patch) | |
tree | 07751f23fc227243f0369daf810f90e1bcc26598 | |
parent | 50aeb126498788eb766a33304e4b6c8d58b2d6b7 (diff) | |
download | bundler-5bd2958e1c38f4595bdd4fd226f6433eb9efc5d3.tar.gz |
New and much more readable error messages for conflicts
-rw-r--r-- | lib/bundler/resolver.rb | 31 | ||||
-rw-r--r-- | spec/install/gems/simple_case_spec.rb | 15 |
2 files changed, 31 insertions, 15 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 69cf38a4d2..d1f40e11ff 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -366,31 +366,36 @@ module Bundler end def version_conflict - VersionConflict.new( - errors.keys, - "No compatible versions could be found for required dependencies:\n #{error_message}") + VersionConflict.new(errors.keys, error_message) end def error_message output = errors.inject("") do |o, (conflict, (origin, requirement))| + req_string = requirement.to_s.gsub(/\, (runtime|development)\)$/, ')') if origin - o << " Conflict on: #{conflict.inspect}:\n" - if origin.respond_to?(:required_by) && required_by = origin.required_by.first - o << " * #{conflict} (#{origin.version}) activated by #{required_by}\n" + o << "Bundler could not find compatible versions for gem #{conflict.inspect}:\n" + + if requirement.required_by.first + o << " #{requirement.required_by.first}\n" + o << " #{req_string}\n" else - o << " * #{conflict} (#{origin.version}) in Gemfile.lock\n" + o << " In Gemfile:\n" + o << " #{req_string}\n" end - o << " * #{requirement} required" - if requirement.required_by.first - o << " by #{requirement.required_by.first}\n" + o << "\n" + + if origin.respond_to?(:required_by) && required_by = origin.required_by.first + o << " #{required_by} depends on\n" + o << " #{conflict} (#{origin.version})\n" else - o << " in Gemfile\n" + o << " In snapshot (Gemfile.lock):\n " + o << " #{conflict} (#{origin.version})\n" end + else - o << " #{requirement} not found in any of the sources\n" + o << " #{req_string} could not be found in any of the sources\n" o << " required by #{requirement.required_by.first}\n" end - o << " All possible versions of origin requirements conflict." end end end diff --git a/spec/install/gems/simple_case_spec.rb b/spec/install/gems/simple_case_spec.rb index b85de8f0f8..9beeb5327d 100644 --- a/spec/install/gems/simple_case_spec.rb +++ b/spec/install/gems/simple_case_spec.rb @@ -449,13 +449,24 @@ describe "bundle install with gem sources" do should_not_be_installed "bundler 0.9.1" end - it "cause a conflict if explicitly requesting a different version" do + it "causes a conflict if explicitly requesting a different version" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rails", "3.0" gem "bundler", "0.9.2" G - out.should =~ /conflict on: "bundler"/i + + nice_error = <<-E.strip.gsub(/^ {8}/, '') + Fetching source index for file:/Users/carlhuda/Developer/Source/bundler/tmp/gems/remote2/ + Bundler could not find compatible versions for gem "bundler": + In Gemfile: + bundler (= 0.9.2) + + In snapshot (Gemfile.lock): + bundler (1.0.0.beta.1) + E + out.should == nice_error + end end it "can install dependencies even if " do |