mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Move vpath.rb into tool library direcotry.
This commit is contained in:
parent
bd494ae79b
commit
badfbdf32c
4 changed files with 3 additions and 3 deletions
87
tool/lib/vpath.rb
Normal file
87
tool/lib/vpath.rb
Normal file
|
@ -0,0 +1,87 @@
|
|||
# -*- coding: us-ascii -*-
|
||||
|
||||
class VPath
|
||||
attr_accessor :separator
|
||||
|
||||
def initialize(*list)
|
||||
@list = list
|
||||
@additional = []
|
||||
@separator = nil
|
||||
end
|
||||
|
||||
def inspect
|
||||
list.inspect
|
||||
end
|
||||
|
||||
def search(meth, base, *rest)
|
||||
begin
|
||||
meth.call(base, *rest)
|
||||
rescue Errno::ENOENT => error
|
||||
list.each do |dir|
|
||||
return meth.call(File.join(dir, base), *rest) rescue nil
|
||||
end
|
||||
raise error
|
||||
end
|
||||
end
|
||||
|
||||
def process(*args, &block)
|
||||
search(File.method(__callee__), *args, &block)
|
||||
end
|
||||
|
||||
alias stat process
|
||||
alias lstat process
|
||||
|
||||
def open(*args)
|
||||
f = search(File.method(:open), *args)
|
||||
if block_given?
|
||||
begin
|
||||
yield f
|
||||
ensure
|
||||
f.close unless f.closed?
|
||||
end
|
||||
else
|
||||
f
|
||||
end
|
||||
end
|
||||
|
||||
def read(*args)
|
||||
open(*args) {|f| f.read}
|
||||
end
|
||||
|
||||
def foreach(file, *args, &block)
|
||||
open(file) {|f| f.each(*args, &block)}
|
||||
end
|
||||
|
||||
def def_options(opt)
|
||||
opt.on("-I", "--srcdir=DIR", "add a directory to search path") {|dir|
|
||||
@additional << dir
|
||||
}
|
||||
opt.on("-L", "--vpath=PATH LIST", "add directories to search path") {|dirs|
|
||||
@additional << [dirs]
|
||||
}
|
||||
opt.on("--path-separator=SEP", /\A(?:\W\z|\.(\W).+)/, "separator for vpath") {|sep, vsep|
|
||||
# hack for msys make.
|
||||
@separator = vsep || sep
|
||||
}
|
||||
end
|
||||
|
||||
def list
|
||||
@additional.reject! do |dirs|
|
||||
case dirs
|
||||
when String
|
||||
@list << dirs
|
||||
when Array
|
||||
raise "--path-separator option is needed for vpath list" unless @separator
|
||||
# @separator ||= (require 'rbconfig'; RbConfig::CONFIG["PATH_SEPARATOR"])
|
||||
@list.concat(dirs[0].split(@separator))
|
||||
end
|
||||
true
|
||||
end
|
||||
@list
|
||||
end
|
||||
|
||||
def strip(path)
|
||||
prefix = list.map {|dir| Regexp.quote(dir)}
|
||||
path.sub(/\A#{prefix.join('|')}(?:\/|\z)/, '')
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue