1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/rubygems/commands/which_command.rb
naruse 269503b544 Revert r42938 "* lib/rubygems: Update to RubyGems 2.1.3"
It breaks build.
http://u64.rubyci.org/~chkbuild/ruby-trunk/log/20130913T200302Z.diff.html.gz

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-14 08:59:02 +00:00

93 lines
2.2 KiB
Ruby

require 'rubygems/command'
class Gem::Commands::WhichCommand < Gem::Command
def initialize
super 'which', 'Find the location of a library file you can require',
: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 description # :nodoc:
<<-EOF
The which command is like the shell which command and shows you where
the file you wish to require lives.
You can use the which command to help determine why you are requiring a
version you did not expect or to look at the content of a file you are
requiring to see why it does not behave as you expect.
EOF
end
def execute
found = false
options[:args].each do |arg|
arg = arg.sub(/#{Regexp.union(*Gem.suffixes)}$/, '')
dirs = $LOAD_PATH
spec = Gem::Specification.find_by_path arg
if spec then
if options[:search_gems_first] then
dirs = gem_paths(spec) + $LOAD_PATH
else
dirs = $LOAD_PATH + gem_paths(spec)
end
end
# TODO: this is totally redundant and stupid
paths = find_paths arg, dirs
if paths.empty? then
alert_error "Can't find ruby library file or shared library #{arg}"
else
say paths
found = true
end
end
terminate_interaction 1 unless found
end
def find_paths(package_name, dirs)
result = []
dirs.each do |dir|
Gem.suffixes.each do |ext|
full_path = File.join dir, "#{package_name}#{ext}"
if File.exist? full_path and not File.directory? 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 [FILE ...]"
end
end