diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb index 0bb139f861..0eee52492f 100644 --- a/lib/rubygems/basic_specification.rb +++ b/lib/rubygems/basic_specification.rb @@ -105,6 +105,13 @@ class Gem::BasicSpecification default_gem? ? 1 : -1 end + ## + # Gems higher up in +gem_path+ take precedence + + def base_dir_priority(gem_path) + gem_path.index(base_dir) || gem_path.size + end + ## # Returns full path to the directory where gem's extensions are installed. diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 99d2a96def..e50f833852 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -771,6 +771,11 @@ class Gem::Specification < Gem::BasicSpecification end private_class_method :clear_load_cache + def self.gem_path # :nodoc: + Gem.path + end + private_class_method :gem_path + def self.each_gemspec(dirs) # :nodoc: dirs.each do |dir| Gem::Util.glob_files_in_dir("*.gemspec", dir).each do |path| @@ -834,7 +839,7 @@ class Gem::Specification < Gem::BasicSpecification next platforms if platforms.nonzero? default_gem = a.default_gem_priority <=> b.default_gem_priority next default_gem if default_gem.nonzero? - b.base_dir == Gem.path.first ? 1 : -1 + a.base_dir_priority(gem_path) <=> b.base_dir_priority(gem_path) end end @@ -910,7 +915,7 @@ class Gem::Specification < Gem::BasicSpecification # Return the directories that Specification uses to find specs. def self.dirs - @@dirs ||= Gem::SpecificationRecord.dirs_from(Gem.path) + @@dirs ||= Gem::SpecificationRecord.dirs_from(gem_path) end ##