diff options
author | Carl Lerche <carllerche@mac.com> | 2010-01-29 21:43:43 -0800 |
---|---|---|
committer | Carl Lerche <carllerche@mac.com> | 2010-01-29 21:43:43 -0800 |
commit | 92bde2fc8f99cf94c01fecd4c621b72994ba479d (patch) | |
tree | a7fbfb80af6e1a805efc6ee6d0268c29fc1e4829 | |
parent | 72867a15ca3813564389a9dfdc3236457af99fa2 (diff) | |
download | bundler-92bde2fc8f99cf94c01fecd4c621b72994ba479d.tar.gz |
Make sure that gems that are pinned to git are used when requested
-rw-r--r-- | lib/bundler/installer.rb | 18 | ||||
-rw-r--r-- | lib/bundler/source.rb | 7 | ||||
-rw-r--r-- | spec/install/git_spec.rb | 14 | ||||
-rw-r--r-- | spec/runtime/setup_spec.rb | 2 |
4 files changed, 35 insertions, 6 deletions
diff --git a/lib/bundler/installer.rb b/lib/bundler/installer.rb index 1277f31f31..1861e0fbb0 100644 --- a/lib/bundler/installer.rb +++ b/lib/bundler/installer.rb @@ -46,8 +46,20 @@ module Bundler # Return unless all the dependencies have = version requirements return unless dependencies.all? { |d| unambiguous?(d) } + index = local_index + sources.each do |source| + next unless source.respond_to?(:local_specs) + index = source.local_specs.merge(index) + end + + source_requirements = {} + dependencies.each do |dep| + next unless dep.source && dep.source.respond_to?(:local_specs) + source_requirements[dep.name] = dep.source.local_specs + end + # Run a resolve against the locally available gems - specs = Resolver.resolve(dependencies, local_index) + specs = Resolver.resolve(dependencies, local_index, source_requirements) # Simple logic for now. Can improve later. specs.length == dependencies.length && specs @@ -60,8 +72,10 @@ module Bundler Bundler.ui.info "Resolving dependencies... " source_requirements = {} dependencies.each do |dep| - source_requirements[dep.name] = dep.source.specs if dep.source + next unless dep.source + source_requirements[dep.name] = dep.source.specs end + specs = Resolver.resolve(dependencies, index, source_requirements) Bundler.ui.info "Done." specs diff --git a/lib/bundler/source.rb b/lib/bundler/source.rb index 702decbfa1..2c8557adac 100644 --- a/lib/bundler/source.rb +++ b/lib/bundler/source.rb @@ -104,8 +104,8 @@ module Bundler @path = options[:path] end - def specs - @specs ||= begin + def local_specs + @local_specs ||= begin index = Index.new Dir["#{path}/#{@glob}"].each do |file| @@ -121,7 +121,8 @@ module Bundler end end - alias local_specs specs + alias specs local_specs + end class Git < Path diff --git a/spec/install/git_spec.rb b/spec/install/git_spec.rb index c37ba000cf..7084a69db2 100644 --- a/spec/install/git_spec.rb +++ b/spec/install/git_spec.rb @@ -96,4 +96,18 @@ describe "gemfile install with git sources" do out.should == "WIN" end + + it "installs from git even if a rubygems gem is present" do + build_gem "foo", "1.0", :path => lib_path('fake_foo'), :to_system => true do |s| + s.write "lib/foo.rb", "raise 'FAIL'" + end + + build_git "foo", "1.0" + + install_gemfile <<-G + gem "foo", "1.0", :git => "#{lib_path('foo-1.0')}" + G + + should_be_installed "foo 1.0" + end end
\ No newline at end of file diff --git a/spec/runtime/setup_spec.rb b/spec/runtime/setup_spec.rb index e3bd28b700..99a783674e 100644 --- a/spec/runtime/setup_spec.rb +++ b/spec/runtime/setup_spec.rb @@ -2,7 +2,7 @@ require File.expand_path('../../spec_helper', __FILE__) describe "Bundler.setup" do - it "works" do + it "uses gems from pinned git sources even" do pending end end
\ No newline at end of file |