зеркало из https://github.com/github/ruby.git
load.c: real path to load
* load.c (rb_construct_expanded_load_path): expand load paths to real paths to get rid of duplicate loading from symbolic-linked directories. [Feature #10222] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5754f15975
Коммит
b6d3927e16
3
load.c
3
load.c
|
@ -85,7 +85,8 @@ rb_construct_expanded_load_path(enum expand_type type, int *has_relative, int *h
|
|||
if (is_string)
|
||||
rb_str_freeze(path);
|
||||
as_str = rb_get_path_check_convert(path, as_str, level);
|
||||
expanded_path = rb_file_expand_path_fast(as_str, Qnil);
|
||||
expanded_path = rb_check_realpath(Qnil, as_str);
|
||||
if (NIL_P(expanded_path)) expanded_path = as_str;
|
||||
rb_ary_push(ary, rb_fstring(expanded_path));
|
||||
}
|
||||
rb_obj_freeze(ary);
|
||||
|
|
|
@ -1019,7 +1019,7 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status|
|
|||
warning = nil
|
||||
path = nil
|
||||
Tempfile.create(%w[circular .rb]) do |t|
|
||||
path = t.path
|
||||
path = File.realpath(t.path)
|
||||
basename = File.basename(path)
|
||||
t.puts "require '#{basename}'"
|
||||
t.close
|
||||
|
|
|
@ -881,4 +881,18 @@ class TestRequire < Test::Unit::TestCase
|
|||
end;
|
||||
end
|
||||
end
|
||||
|
||||
def test_symlink_load_path
|
||||
Dir.mktmpdir {|tmp|
|
||||
Dir.mkdir(File.join(tmp, "real"))
|
||||
begin
|
||||
File.symlink "real", File.join(tmp, "symlink")
|
||||
rescue NotImplementedError, Errno::EACCES
|
||||
skip "File.symlink is not implemented"
|
||||
end
|
||||
File.write(File.join(tmp, "real/a.rb"), "print __FILE__")
|
||||
result = IO.popen([EnvUtil.rubybin, "-I#{tmp}/symlink", "-e", "require 'a.rb'"], &:read)
|
||||
assert_operator(result, :end_with?, "/real/a.rb")
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче