зеркало из 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)
|
if (is_string)
|
||||||
rb_str_freeze(path);
|
rb_str_freeze(path);
|
||||||
as_str = rb_get_path_check_convert(path, as_str, level);
|
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_ary_push(ary, rb_fstring(expanded_path));
|
||||||
}
|
}
|
||||||
rb_obj_freeze(ary);
|
rb_obj_freeze(ary);
|
||||||
|
|
|
@ -1019,7 +1019,7 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status|
|
||||||
warning = nil
|
warning = nil
|
||||||
path = nil
|
path = nil
|
||||||
Tempfile.create(%w[circular .rb]) do |t|
|
Tempfile.create(%w[circular .rb]) do |t|
|
||||||
path = t.path
|
path = File.realpath(t.path)
|
||||||
basename = File.basename(path)
|
basename = File.basename(path)
|
||||||
t.puts "require '#{basename}'"
|
t.puts "require '#{basename}'"
|
||||||
t.close
|
t.close
|
||||||
|
|
|
@ -881,4 +881,18 @@ class TestRequire < Test::Unit::TestCase
|
||||||
end;
|
end;
|
||||||
end
|
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
|
end
|
||||||
|
|
Загрузка…
Ссылка в новой задаче