diff options
Diffstat (limited to 'lib/rubygems/resolver/git_set.rb')
-rw-r--r-- | lib/rubygems/resolver/git_set.rb | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/lib/rubygems/resolver/git_set.rb b/lib/rubygems/resolver/git_set.rb index 3c38d3dca0..c912e367d9 100644 --- a/lib/rubygems/resolver/git_set.rb +++ b/lib/rubygems/resolver/git_set.rb @@ -42,38 +42,27 @@ class Gem::Resolver::GitSet < Gem::Resolver::Set # Finds all git gems matching +req+ def find_all req - @repositories.keys.select do |name| - name == req.name - end.map do |name| - @specs[name] || load_spec(name) - end.select do |spec| + prefetch nil + + specs.values.select do |spec| req.matches_spec? spec end end - def load_spec name - repository, reference = @repositories[name] - - source = Gem::Source::Git.new name, repository, reference - - spec = source.load_spec name - - git_spec = - Gem::Resolver::GitSpecification.new self, spec, source - - @specs[name] = git_spec - end - ## # Prefetches specifications from the git repositories in this set. def prefetch reqs - names = reqs.map { |req| req.name } + return unless @specs.empty? + + @repositories.each do |name, (repository, reference)| + source = Gem::Source::Git.new name, repository, reference - @repositories.each_key do |name| - next unless names.include? name + source.specs.each do |spec| + git_spec = Gem::Resolver::GitSpecification.new self, spec, source - load_spec name + @specs[spec.name] = git_spec + end end end |