aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rubygems/resolver
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-04 00:48:31 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-04 00:48:31 +0000
commitea2a00d785576a7dc45c0f6e965de605929e889d (patch)
tree567e52888b17aacb404c59eb64519d927fb8894f /lib/rubygems/resolver
parentbd950a75b512a7d6243d1f0bb5e944a06a2e1f94 (diff)
downloadruby-ea2a00d785576a7dc45c0f6e965de605929e889d.tar.gz
* lib/rubygems: Update to RubyGems 2.2.2 prerelease to check fixes to
CI. * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44799 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems/resolver')
-rw-r--r--lib/rubygems/resolver/api_set.rb7
-rw-r--r--lib/rubygems/resolver/best_set.rb21
-rw-r--r--lib/rubygems/resolver/composed_set.rb11
-rw-r--r--lib/rubygems/resolver/git_set.rb3
-rw-r--r--lib/rubygems/resolver/index_set.rb4
-rw-r--r--lib/rubygems/resolver/installer_set.rb16
-rw-r--r--lib/rubygems/resolver/lock_set.rb2
-rw-r--r--lib/rubygems/resolver/set.rb17
-rw-r--r--lib/rubygems/resolver/vendor_set.rb2
9 files changed, 80 insertions, 3 deletions
diff --git a/lib/rubygems/resolver/api_set.rb b/lib/rubygems/resolver/api_set.rb
index 89ee3c9b15..5475e626e6 100644
--- a/lib/rubygems/resolver/api_set.rb
+++ b/lib/rubygems/resolver/api_set.rb
@@ -25,10 +25,12 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
# http://guides.rubygems.org/rubygems-org-api
def initialize dep_uri = 'https://rubygems.org/api/v1/dependencies'
+ super()
+
dep_uri = URI dep_uri unless URI === dep_uri # for ruby 1.8
@dep_uri = dep_uri
- @uri = dep_uri + '../../..'
+ @uri = dep_uri + '../..'
@data = Hash.new { |h,k| h[k] = [] }
@source = Gem::Source.new @uri
@@ -41,6 +43,8 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
def find_all req
res = []
+ return res unless @remote
+
versions(req.name).each do |ver|
if req.dependency.match? req.name, ver[:number]
res << Gem::Resolver::APISpecification.new(self, ver)
@@ -55,6 +59,7 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
# data for DependencyRequests +reqs+.
def prefetch reqs
+ return unless @remote
names = reqs.map { |r| r.dependency.name }
needed = names - @data.keys
diff --git a/lib/rubygems/resolver/best_set.rb b/lib/rubygems/resolver/best_set.rb
index fa6c9f84c0..20bb94827b 100644
--- a/lib/rubygems/resolver/best_set.rb
+++ b/lib/rubygems/resolver/best_set.rb
@@ -12,11 +12,30 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
def initialize sources = Gem.sources
super()
- sources.each_source do |source|
+ @sources = sources
+ end
+
+ ##
+ # Picks which sets to use for the configured sources.
+
+ def pick_sets # :nodoc:
+ @sources.each_source do |source|
@sets << source.dependency_resolver_set
end
end
+ def find_all req # :nodoc:
+ pick_sets if @remote and @sets.empty?
+
+ super
+ end
+
+ def prefetch reqs # :nodoc:
+ pick_sets if @remote and @sets.empty?
+
+ super
+ end
+
def pretty_print q # :nodoc:
q.group 2, '[BestSet', ']' do
q.breakable
diff --git a/lib/rubygems/resolver/composed_set.rb b/lib/rubygems/resolver/composed_set.rb
index 19227e095b..6f912b0afe 100644
--- a/lib/rubygems/resolver/composed_set.rb
+++ b/lib/rubygems/resolver/composed_set.rb
@@ -16,10 +16,21 @@ class Gem::Resolver::ComposedSet < Gem::Resolver::Set
# Gem::Resolver::compose_sets instead.
def initialize *sets
+ super()
+
@sets = sets
end
##
+ # Sets the remote network access for all composed sets.
+
+ def remote= remote
+ super
+
+ @sets.each { |set| set.remote = remote }
+ end
+
+ ##
# Finds all specs matching +req+ in all sets.
def find_all req
diff --git a/lib/rubygems/resolver/git_set.rb b/lib/rubygems/resolver/git_set.rb
index 1a2b230b80..d32710e3d6 100644
--- a/lib/rubygems/resolver/git_set.rb
+++ b/lib/rubygems/resolver/git_set.rb
@@ -33,6 +33,8 @@ class Gem::Resolver::GitSet < Gem::Resolver::Set
attr_reader :specs # :nodoc:
def initialize # :nodoc:
+ super()
+
@git = ENV['git'] || 'git'
@need_submodules = {}
@repositories = {}
@@ -91,6 +93,7 @@ class Gem::Resolver::GitSet < Gem::Resolver::Set
@repositories.each do |name, (repository, reference)|
source = Gem::Source::Git.new name, repository, reference
source.root_dir = @root_dir
+ source.remote = @remote
source.specs.each do |spec|
git_spec = Gem::Resolver::GitSpecification.new self, spec, source
diff --git a/lib/rubygems/resolver/index_set.rb b/lib/rubygems/resolver/index_set.rb
index a6ef56bb7f..ef01f0f0ad 100644
--- a/lib/rubygems/resolver/index_set.rb
+++ b/lib/rubygems/resolver/index_set.rb
@@ -5,6 +5,8 @@
class Gem::Resolver::IndexSet < Gem::Resolver::Set
def initialize source = nil # :nodoc:
+ super()
+
@f =
if source then
sources = Gem::SourceList.from [source]
@@ -34,6 +36,8 @@ class Gem::Resolver::IndexSet < Gem::Resolver::Set
def find_all req
res = []
+ return res unless @remote
+
name = req.dependency.name
@all[name].each do |uri, n|
diff --git a/lib/rubygems/resolver/installer_set.rb b/lib/rubygems/resolver/installer_set.rb
index 27e6455148..045c893fdc 100644
--- a/lib/rubygems/resolver/installer_set.rb
+++ b/lib/rubygems/resolver/installer_set.rb
@@ -24,14 +24,17 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
# Creates a new InstallerSet that will look for gems in +domain+.
def initialize domain
+ super()
+
@domain = domain
+ @remote = consider_remote?
@f = Gem::SpecFetcher.fetcher
@always_install = []
@ignore_dependencies = false
@ignore_installed = false
- @remote_set = Gem::Resolver::BestSet.new if consider_remote?
+ @remote_set = Gem::Resolver::BestSet.new
@specs = {}
end
@@ -120,5 +123,16 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
end
end
+ def remote= remote # :nodoc:
+ case @domain
+ when :local then
+ @domain = :both if remote
+ when :remote then
+ @domain = nil unless remote
+ when :both then
+ @domain = :local unless remote
+ end
+ end
+
end
diff --git a/lib/rubygems/resolver/lock_set.rb b/lib/rubygems/resolver/lock_set.rb
index cdb41b22bf..f4987576ec 100644
--- a/lib/rubygems/resolver/lock_set.rb
+++ b/lib/rubygems/resolver/lock_set.rb
@@ -9,6 +9,8 @@ class Gem::Resolver::LockSet < Gem::Resolver::Set
# Creates a new LockSet from the given +source+
def initialize source
+ super()
+
@source = Gem::Source::Lock.new source
@specs = []
end
diff --git a/lib/rubygems/resolver/set.rb b/lib/rubygems/resolver/set.rb
index 32c137ef6b..f053b65e15 100644
--- a/lib/rubygems/resolver/set.rb
+++ b/lib/rubygems/resolver/set.rb
@@ -5,6 +5,15 @@
class Gem::Resolver::Set
##
+ # Set to true to disable network access for this set
+
+ attr_accessor :remote
+
+ def initialize # :nodoc:
+ @remote = true
+ end
+
+ ##
# The find_all method must be implemented. It returns all Resolver
# Specification objects matching the given DependencyRequest +req+.
@@ -23,5 +32,13 @@ class Gem::Resolver::Set
def prefetch reqs
end
+ ##
+ # When true, this set is allowed to access the network when looking up
+ # specifications or dependencies.
+
+ def remote? # :nodoc:
+ @remote
+ end
+
end
diff --git a/lib/rubygems/resolver/vendor_set.rb b/lib/rubygems/resolver/vendor_set.rb
index 3db637f4a3..6e867073be 100644
--- a/lib/rubygems/resolver/vendor_set.rb
+++ b/lib/rubygems/resolver/vendor_set.rb
@@ -21,6 +21,8 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
attr_reader :specs # :nodoc:
def initialize # :nodoc:
+ super()
+
@directories = {}
@specs = {}
end