summaryrefslogtreecommitdiff
path: root/lib/rubygems/resolver/api_set.rb
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-11-21 23:27:30 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-11-21 23:27:30 +0000
commit5307d803f5cce7b14a6afd1d51f6d53ec85ca87d (patch)
treeaac2997a9ff000fbf2f1f9f27077bb7b2403f2c9 /lib/rubygems/resolver/api_set.rb
parentb1529a30e08040b717adef8ac1fa8be1c060e7e1 (diff)
* 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
Diffstat (limited to 'lib/rubygems/resolver/api_set.rb')
-rw-r--r--lib/rubygems/resolver/api_set.rb49
1 files changed, 42 insertions, 7 deletions
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
@@ -10,13 +10,28 @@ 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