summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Lerche <carllerche@mac.com>2010-01-29 21:43:43 -0800
committerCarl Lerche <carllerche@mac.com>2010-01-29 21:43:43 -0800
commit92bde2fc8f99cf94c01fecd4c621b72994ba479d (patch)
treea7fbfb80af6e1a805efc6ee6d0268c29fc1e4829
parent72867a15ca3813564389a9dfdc3236457af99fa2 (diff)
downloadbundler-92bde2fc8f99cf94c01fecd4c621b72994ba479d.tar.gz
Make sure that gems that are pinned to git are used when requested
-rw-r--r--lib/bundler/installer.rb18
-rw-r--r--lib/bundler/source.rb7
-rw-r--r--spec/install/git_spec.rb14
-rw-r--r--spec/runtime/setup_spec.rb2
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