summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlhuda <carlhuda@engineyard.com>2010-06-16 14:14:57 -0700
committerwycats <wycats@gmail.com>2010-06-29 14:44:31 -0700
commit5bd2958e1c38f4595bdd4fd226f6433eb9efc5d3 (patch)
tree07751f23fc227243f0369daf810f90e1bcc26598
parent50aeb126498788eb766a33304e4b6c8d58b2d6b7 (diff)
downloadbundler-5bd2958e1c38f4595bdd4fd226f6433eb9efc5d3.tar.gz
New and much more readable error messages for conflicts
-rw-r--r--lib/bundler/resolver.rb31
-rw-r--r--spec/install/gems/simple_case_spec.rb15
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