diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rubygems/dependency_installer.rb | 3 | ||||
-rw-r--r-- | lib/rubygems/request_set.rb | 34 | ||||
-rw-r--r-- | lib/rubygems/resolver.rb | 20 |
3 files changed, 37 insertions, 20 deletions
diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb index e404d42b3a..b7babf6d38 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb @@ -426,7 +426,8 @@ class Gem::DependencyInstaller if @ignore_dependencies then installer_set.ignore_dependencies = true - request_set.soft_missing = true + request_set.ignore_dependencies = true + request_set.soft_missing = true end composed_set = Gem::Resolver.compose_sets as, installer_set diff --git a/lib/rubygems/request_set.rb b/lib/rubygems/request_set.rb index 24bd6d1109..aa3f27c9c1 100644 --- a/lib/rubygems/request_set.rb +++ b/lib/rubygems/request_set.rb @@ -33,6 +33,12 @@ class Gem::RequestSet attr_reader :git_set # :nodoc: ## + # When true, dependency resolution is not performed, only the requested gems + # are installed. + + attr_accessor :ignore_dependencies + + ## # Sets used for resolution attr_reader :sets # :nodoc: @@ -59,17 +65,18 @@ class Gem::RequestSet def initialize *deps @dependencies = deps - @always_install = [] - @dependency_names = {} - @development = false - @git_set = nil - @install_dir = Gem.dir - @requests = [] - @sets = [] - @soft_missing = false - @sorted = nil - @specs = nil - @vendor_set = nil + @always_install = [] + @dependency_names = {} + @development = false + @git_set = nil + @ignore_dependencies = false + @install_dir = Gem.dir + @requests = [] + @sets = [] + @soft_missing = false + @sorted = nil + @specs = nil + @vendor_set = nil yield self if block_given? end @@ -230,8 +237,9 @@ class Gem::RequestSet set = Gem::Resolver.compose_sets(*@sets) resolver = Gem::Resolver.new @dependencies, set - resolver.development = @development - resolver.soft_missing = @soft_missing + resolver.development = @development + resolver.ignore_dependencies = @ignore_dependencies + resolver.soft_missing = @soft_missing @resolver = resolver diff --git a/lib/rubygems/resolver.rb b/lib/rubygems/resolver.rb index ad9373cb86..d455e03c05 100644 --- a/lib/rubygems/resolver.rb +++ b/lib/rubygems/resolver.rb @@ -32,6 +32,11 @@ class Gem::Resolver attr_accessor :development ## + # When true, no dependencies are looked up for requested gems. + + attr_accessor :ignore_dependencies + + ## # List of dependencies that could not be found in the configured sources. attr_reader :missing @@ -91,11 +96,12 @@ class Gem::Resolver @set = set || Gem::Resolver::IndexSet.new @needed = needed - @conflicts = [] - @development = false - @missing = [] - @soft_missing = false - @stats = Gem::Resolver::Stats.new + @conflicts = [] + @development = false + @ignore_dependencies = false + @missing = [] + @soft_missing = false + @stats = Gem::Resolver::Stats.new end def explain stage, *data # :nodoc: @@ -132,6 +138,8 @@ class Gem::Resolver end def requests s, act, reqs=nil # :nodoc: + return reqs if @ignore_dependencies + s.dependencies.reverse_each do |d| next if d.type == :development and not @development reqs.add Gem::Resolver::DependencyRequest.new(d, act) @@ -151,7 +159,7 @@ class Gem::Resolver def resolve @conflicts = [] - needed = RequirementList.new + needed = Gem::Resolver::RequirementList.new @needed.reverse_each do |n| request = Gem::Resolver::DependencyRequest.new n, nil |