mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Import RubyGems trunk revision 1493.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13862 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7a4aad7535
commit
fbf59bdbea
144 changed files with 21330 additions and 0 deletions
86
lib/rubygems/commands/which_command.rb
Normal file
86
lib/rubygems/commands/which_command.rb
Normal file
|
@ -0,0 +1,86 @@
|
|||
require 'rubygems/command'
|
||||
require 'rubygems/gem_path_searcher'
|
||||
|
||||
class Gem::Commands::WhichCommand < Gem::Command
|
||||
|
||||
EXT = %w[.rb .rbw .so .dll] # HACK
|
||||
|
||||
def initialize
|
||||
super 'which', 'Find the location of a library',
|
||||
:search_gems_first => false, :show_all => false
|
||||
|
||||
add_option '-a', '--[no-]all', 'show all matching files' do |show_all, options|
|
||||
options[:show_all] = show_all
|
||||
end
|
||||
|
||||
add_option '-g', '--[no-]gems-first',
|
||||
'search gems before non-gems' do |gems_first, options|
|
||||
options[:search_gems_first] = gems_first
|
||||
end
|
||||
end
|
||||
|
||||
def arguments # :nodoc:
|
||||
"FILE name of file to find"
|
||||
end
|
||||
|
||||
def defaults_str # :nodoc:
|
||||
"--no-gems-first --no-all"
|
||||
end
|
||||
|
||||
def usage # :nodoc:
|
||||
"#{program_name} FILE [FILE ...]"
|
||||
end
|
||||
|
||||
def execute
|
||||
searcher = Gem::GemPathSearcher.new
|
||||
|
||||
options[:args].each do |arg|
|
||||
dirs = $LOAD_PATH
|
||||
spec = searcher.find arg
|
||||
|
||||
if spec then
|
||||
if options[:search_gems_first] then
|
||||
dirs = gem_paths(spec) + $LOAD_PATH
|
||||
else
|
||||
dirs = $LOAD_PATH + gem_paths(spec)
|
||||
end
|
||||
|
||||
say "(checking gem #{spec.full_name} for #{arg})" if
|
||||
Gem.configuration.verbose
|
||||
end
|
||||
|
||||
paths = find_paths arg, dirs
|
||||
|
||||
if paths.empty? then
|
||||
say "Can't find #{arg}"
|
||||
else
|
||||
say paths
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def find_paths(package_name, dirs)
|
||||
result = []
|
||||
|
||||
dirs.each do |dir|
|
||||
EXT.each do |ext|
|
||||
full_path = File.join dir, "#{package_name}#{ext}"
|
||||
if File.exist? full_path then
|
||||
result << full_path
|
||||
return result unless options[:show_all]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
def gem_paths(spec)
|
||||
spec.require_paths.collect { |d| File.join spec.full_gem_path, d }
|
||||
end
|
||||
|
||||
def usage # :nodoc:
|
||||
"#{program_name} FILE [...]"
|
||||
end
|
||||
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue