lib/bundler/definition.rb in bundler-1.8.0.pre vs lib/bundler/definition.rb in bundler-1.8.0
- old
+ new
@@ -197,15 +197,15 @@
def index
@index ||= Index.build do |idx|
dependency_names = @dependencies.map { |d| d.name }
- sources.all_sources.each do |s|
- s.dependency_names = dependency_names.dup
- idx.add_source s.specs
- s.specs.each { |spec| dependency_names.delete(spec.name) }
- dependency_names.push(*s.unmet_deps).uniq!
+ sources.all_sources.each do |source|
+ source.dependency_names = dependency_names.dup
+ idx.add_source source.specs
+ dependency_names -= pinned_spec_names(source.specs)
+ dependency_names.push(*source.unmet_deps).uniq!
end
end
end
# used when frozen is enabled so we can find the bundler
@@ -595,9 +595,23 @@
dependencies.each do |dep|
next unless dep.source
source_requirements[dep.name] = dep.source.specs
end
source_requirements
+ end
+
+ def pinned_spec_names(specs)
+ names = []
+ specs.each do |s|
+ # TODO when two sources without blocks is an error, we can change
+ # this check to !s.source.is_a?(Source::LocalRubygems). For now,
+ # we need to ask every Rubygems for every gem name.
+ if s.source.is_a?(Source::Git) || s.source.is_a?(Source::Path)
+ names << s.name
+ end
+ end
+ names.uniq!
+ names
end
end
end