From 5307d803f5cce7b14a6afd1d51f6d53ec85ca87d Mon Sep 17 00:00:00 2001 From: drbrain Date: Thu, 21 Nov 2013 23:27:30 +0000 Subject: * lib/rubygems: Update to RubyGems master 50a8210. Important changes in this commit: RubyGems now automatically checks for gem.deps.rb or Gemfile when running ruby executables. This behavior is similar to `bundle exec rake`. This change may be reverted before Ruby 2.1.0 if too many bugs are found. * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43767 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rubygems/resolver/api_set.rb | 49 ++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 7 deletions(-) (limited to 'lib/rubygems/resolver/api_set.rb') diff --git a/lib/rubygems/resolver/api_set.rb b/lib/rubygems/resolver/api_set.rb index 60bf911063..89ee3c9b15 100644 --- a/lib/rubygems/resolver/api_set.rb +++ b/lib/rubygems/resolver/api_set.rb @@ -9,14 +9,29 @@ class Gem::Resolver::APISet < Gem::Resolver::Set attr_reader :dep_uri # :nodoc: + ## + # The Gem::Source that gems are fetched from + + attr_reader :source + + ## + # The corresponding place to fetch gems. + + attr_reader :uri + ## # Creates a new APISet that will retrieve gems from +uri+ using the RubyGems - # API described at http://guides.rubygems.org/rubygems-org-api + # API URL +dep_uri+ which is described at + # http://guides.rubygems.org/rubygems-org-api + + def initialize dep_uri = 'https://rubygems.org/api/v1/dependencies' + dep_uri = URI dep_uri unless URI === dep_uri # for ruby 1.8 - def initialize uri = 'https://rubygems.org/api/v1/dependencies' - uri = URI uri unless URI === uri # for ruby 1.8 - @data = Hash.new { |h,k| h[k] = [] } - @dep_uri = uri + @dep_uri = dep_uri + @uri = dep_uri + '../../..' + + @data = Hash.new { |h,k| h[k] = [] } + @source = Gem::Source.new @uri end ## @@ -41,15 +56,35 @@ class Gem::Resolver::APISet < Gem::Resolver::Set def prefetch reqs names = reqs.map { |r| r.dependency.name } - needed = names.find_all { |d| !@data.key?(d) } + needed = names - @data.keys return if needed.empty? uri = @dep_uri + "?gems=#{needed.sort.join ','}" str = Gem::RemoteFetcher.fetcher.fetch_path uri + loaded = [] + Marshal.load(str).each do |ver| - @data[ver[:name]] << ver + name = ver[:name] + + @data[name] << ver + loaded << name + end + + (needed - loaded).each do |missing| + @data[missing] = [] + end + end + + def pretty_print q # :nodoc: + q.group 2, '[APISet', ']' do + q.breakable + q.text "URI: #{@dep_uri}" + + q.breakable + q.text 'gem names:' + q.pp @data.keys end end -- cgit v1.2.3