From d478c7a7342478847cc1148f4134b5f0db04e1d9 Mon Sep 17 00:00:00 2001 From: drbrain Date: Thu, 25 Sep 2008 10:13:50 +0000 Subject: Update to RubyGems 1.3.0 r1891 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19547 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rubygems/gem_path_searcher.rb | 54 +++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 19 deletions(-) (limited to 'lib/rubygems/gem_path_searcher.rb') diff --git a/lib/rubygems/gem_path_searcher.rb b/lib/rubygems/gem_path_searcher.rb index dadad66289..e2b8543bb0 100644 --- a/lib/rubygems/gem_path_searcher.rb +++ b/lib/rubygems/gem_path_searcher.rb @@ -6,15 +6,15 @@ require 'rubygems' -# +## # GemPathSearcher has the capability to find loadable files inside # gems. It generates data up front to speed up searches later. -# + class Gem::GemPathSearcher - # + ## # Initialise the data we need to make searches later. - # + def initialize # We want a record of all the installed gemspecs, in the order # we wish to examine them. @@ -27,7 +27,7 @@ class Gem::GemPathSearcher end end - # + ## # Look in all the installed gems until a matching _path_ is found. # Return the _gemspec_ of the gem where it was found. If no match # is found, return nil. @@ -46,36 +46,52 @@ class Gem::GemPathSearcher # others), which may or may not already be attached to _file_. # This method doesn't care about the full filename that matches; # only that there is a match. - # + def find(path) - @gemspecs.each do |spec| - return spec if matching_file(spec, path) + @gemspecs.find do |spec| matching_file? spec, path end + end + + ## + # Works like #find, but finds all gemspecs matching +path+. + + def find_all(path) + @gemspecs.select do |spec| + matching_file? spec, path end - nil end - private + ## + # Attempts to find a matching path using the require_paths of the given + # +spec+. - # Attempts to find a matching path using the require_paths of the - # given _spec_. - # - # Some of the intermediate results are cached in @lib_dirs for - # speed. - def matching_file(spec, path) # :doc: + def matching_file?(spec, path) + !matching_files(spec, path).empty? + end + + ## + # Returns files matching +path+ in +spec+. + #-- + # Some of the intermediate results are cached in @lib_dirs for speed. + + def matching_files(spec, path) glob = File.join @lib_dirs[spec.object_id], "#{path}#{Gem.suffix_pattern}" - return true unless Dir[glob].select { |f| File.file?(f.untaint) }.empty? + Dir[glob].select { |f| File.file? f.untaint } end - # Return a list of all installed gemspecs, sorted by alphabetical - # order and in reverse version order. + ## + # Return a list of all installed gemspecs, sorted by alphabetical order and + # in reverse version order. + def init_gemspecs Gem.source_index.map { |_, spec| spec }.sort { |a,b| (a.name <=> b.name).nonzero? || (b.version <=> a.version) } end + ## # Returns library directories glob for a gemspec. For example, # '/usr/local/lib/ruby/gems/1.8/gems/foobar-1.0/{lib,ext}' + def lib_dirs_for(spec) "#{spec.full_gem_path}/{#{spec.require_paths.join(',')}}" end -- cgit v1.2.3