diff options
author | Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com> | 2009-08-18 11:35:03 -0700 |
---|---|---|
committer | Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com> | 2009-08-18 11:35:03 -0700 |
commit | d739dbcf06c0129cf89d92dd6e4df3415ce43238 (patch) | |
tree | 3d2136db59bd151ce36d90d331a54b819c7dbb8d | |
parent | ed2cfc68ee3d99784d937f476390609af9fdf25c (diff) | |
download | bundler-d739dbcf06c0129cf89d92dd6e4df3415ce43238.tar.gz |
Add error messages when gems are missing during resolve time
-rw-r--r-- | lib/bundler/cli.rb | 3 | ||||
-rw-r--r-- | lib/bundler/resolver.rb | 8 | ||||
-rw-r--r-- | spec/bundler/cli_spec.rb | 26 | ||||
-rw-r--r-- | spec/bundler/manifest_spec.rb | 1 | ||||
-rw-r--r-- | spec/resolver/engine_spec.rb | 2 |
5 files changed, 39 insertions, 1 deletions
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb index 8208e64177..f5cd16dcf9 100644 --- a/lib/bundler/cli.rb +++ b/lib/bundler/cli.rb @@ -16,6 +16,9 @@ module Bundler rescue VersionConflict => e Bundler.logger.error e.message exit + rescue GemNotFound => e + Bundler.logger.error e.message + exit end def initialize(options) diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 309e4ac00d..bbc2ad9017 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -19,6 +19,7 @@ module Gem end module Bundler + class GemNotFound < StandardError; end class Resolver @@ -100,6 +101,13 @@ module Bundler # TODO: Warn / error when no matching versions are found. matching_versions = @index.search(current) + if matching_versions.empty? + if current.required_by.empty? + raise GemNotFound, "Could not find gem '#{current}' in any of the sources" + end + Bundler.logger.warn "Could not find gem '#{current}' (required by '#{current.required_by.last}') in any of the sources" + end + matching_versions.reverse_each do |spec| conflict = resolve_requirement(spec, current, reqs.dup, activated.dup) conflicts << conflict if conflict diff --git a/spec/bundler/cli_spec.rb b/spec/bundler/cli_spec.rb index 104d3ed701..2f486729ca 100644 --- a/spec/bundler/cli_spec.rb +++ b/spec/bundler/cli_spec.rb @@ -80,10 +80,36 @@ describe "Bundler::CLI" do end describe "error cases" do + before(:each) do + Dir.chdir(tmp_dir) + end + it "displays a friendly error message when there is no Gemfile" do out = gem_command :bundle out.should == "Could not find a Gemfile to use" end + + it "fails when a root level gem does not exist" do + build_manifest <<-Gemfile + clear_sources + source "file://#{gem_repo1}" + gem "monk" + Gemfile + + out = gem_command :bundle + out.should include("Could not find gem 'monk (>= 0, runtime)' in any of the sources") + end + + it "outputs a warning when a child gem dependency is missing dependencies" do + build_manifest <<-Gemfile + clear_sources + source "file://#{gem_repo1}" + gem "treetop" + Gemfile + + out = gem_command :bundle + out.should include("Could not find gem 'polyglot (>= 0.2.5, runtime)' (required by 'treetop (>= 0, runtime)') in any of the sources") + end end describe "it working while specifying the manifest file name" do diff --git a/spec/bundler/manifest_spec.rb b/spec/bundler/manifest_spec.rb index b94fab04c2..0ae6205e10 100644 --- a/spec/bundler/manifest_spec.rb +++ b/spec/bundler/manifest_spec.rb @@ -116,6 +116,7 @@ describe "Bundler::Manifest" do end it "raises a friendly exception if the manifest doesn't resolve" do + pending build_manifest <<-Gemfile clear_sources source "file://#{gem_repo1}" diff --git a/spec/resolver/engine_spec.rb b/spec/resolver/engine_spec.rb index e7d0f1953e..f66e97dfe5 100644 --- a/spec/resolver/engine_spec.rb +++ b/spec/resolver/engine_spec.rb @@ -115,6 +115,6 @@ describe "Resolving specs" do build_dep("a", "= 1.1"), ] - Bundler::Resolver.resolve(deps, index).should be_nil + lambda { Bundler::Resolver.resolve(deps, index) }.should raise_error(Bundler::GemNotFound) end end |