diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-01-12 00:32:22 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-01-12 00:32:22 +0000 |
commit | 853dd6cabe692251376271421be433d68bea2865 (patch) | |
tree | 85adecadc51445c95962b556da3f34cfd0c639da /lib/pathname.rb | |
parent | f86cca6f55ce0e9ec50bc1cb61718d02ebe31e10 (diff) |
* prelude.rb (require_relative): use File.realpath. [ruby-dev:40040]
* include/ruby/intern.h: declare rb_dir_getwd.
* dir.c (rb_dir_getwd): copied from dir_s_getwd to export.
(dir_s_getwd): use rb_dir_getwd.
* file.c (rb_file_s_realpath): new method File.realpath.
(rb_file_s_realdirpath): new method File.realdirpath.
* lib/pathname.rb (Pathname#realpath): use File.realpath.
(Pathname#realdirpath): use File.realdirpath.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/pathname.rb')
-rw-r--r-- | lib/pathname.rb | 59 |
1 files changed, 2 insertions, 57 deletions
diff --git a/lib/pathname.rb b/lib/pathname.rb index 226b0da229..bfd3771c28 100644 --- a/lib/pathname.rb +++ b/lib/pathname.rb @@ -435,61 +435,6 @@ class Pathname end private :cleanpath_conservative - def realpath_rec(prefix, unresolved, h, strict, last = true) - resolved = [] - until unresolved.empty? - n = unresolved.shift - if n == '.' - next - elsif n == '..' - resolved.pop - else - path = prepend_prefix(prefix, File.join(*(resolved + [n]))) - if h.include? path - if h[path] == :resolving - raise Errno::ELOOP.new(path) - else - prefix, *resolved = h[path] - end - else - begin - s = File.lstat(path) - rescue Errno::ENOENT => e - raise e if strict || !last || !unresolved.empty? - resolved << n - break - end - if s.symlink? - h[path] = :resolving - link_prefix, link_names = split_names(File.readlink(path)) - if link_prefix == '' - prefix, *resolved = h[path] = realpath_rec(prefix, resolved + link_names, h, strict, unresolved.empty?) - else - prefix, *resolved = h[path] = realpath_rec(link_prefix, link_names, h, strict, unresolved.empty?) - end - else - resolved << n - h[path] = [prefix, *resolved] - end - end - end - end - return prefix, *resolved - end - private :realpath_rec - - def real_path_internal(strict = false) - path = @path - prefix, names = split_names(path) - if prefix == '' - prefix, names2 = split_names(Dir.pwd) - names = names2 + names - end - prefix, *names = realpath_rec(prefix, names, {}, strict) - self.class.new(prepend_prefix(prefix, File.join(*names))) - end - private :real_path_internal - # # Returns the real (absolute) pathname of +self+ in the actual # filesystem not containing symlinks or useless dots. @@ -498,7 +443,7 @@ class Pathname # called. # def realpath - real_path_internal(true) + self.class.new(File.realpath(@path)) end # @@ -508,7 +453,7 @@ class Pathname # The last component of the real pathname can be nonexistent. # def realdirpath - real_path_internal(false) + self.class.new(File.realdirpath(@path)) end # #parent returns the parent directory. |